Django 提供了一个 Form 类,用于创建 HTML 表单。它描述了一种形式以及它如何工作和显示。

它类似于使用Model创建表单的ModelForm类,但它不需要Model。

表单类的每个字段都映射到 HTML 表单<input>元素,每个字段本身就是一个类,它管理表单数据并在提交表单时执行验证。

让我们看一个示例,其中我们也创建了一些字段。

from django import forms  
class StudentForm(forms.Form):  
    firstname = forms.CharField(label="Enter first name",max_length=50)  
    lastname  = forms.CharField(label="Enter last name", max_length = 100)  

创建一个 StudentForm,其中包含两个 CharField 类型的字段。Charfield 是一个类,用于在表单中创建 HTML 文本输入组件。

label用于设置组件的HTML标签,max_length设置输入值的长度。

渲染后,它会向浏览器生成以下 HTML。

<label for="id_firstname">Enter first name:</label>  
 <input type="text" name="firstname" required maxlength="50" id="id_firstname" />  
<label for="id_lastname">Enter last name:</label> <input type="text" name="lastname" required maxlength="100" id="id_lastname" />  
注意:Django Form 不包含 <form> 标签或提交按钮。我们必须在模板中自己提供这些内容。

下表给出了常用字段及其详细信息。

名称HTML 输入空值
BooleanFieldclass BooleanField(**kwargs)复选框输入False
CharFieldclass CharField(**kwargs)文本输入无论您提供什么作为empty_value。
ChoiceFieldclass ChoiceField(**kwargs)选择''(空字符串)
DateFieldclass DateField(**kwargs)日期输入None
DateTimeFieldclass DateTimeField(**kwargs)日期时间输入None
DecimalFieldclass DecimalField(**kwargs)数字输入None
EmailFieldclass EmailField(**kwargs)电子邮件输入''(空字符串)
FileFieldclass FileField(**kwargs)可清除文件输入None
ImageFieldclass ImageField(**kwargs)可清除文件输入None

让我们看一下在 Django Form 类的帮助下创建 HTML 表单的完整示例。

在 Django 中构建表单

假设我们要创建一个表单来获取学生信息,请使用以下代码。

from django import forms  
class StudentForm(forms.Form):  
    firstname = forms.CharField(label="Enter first name",max_length=50)  
    lastname  = forms.CharField(label="Enter last name", max_length = 100)  

将此代码放入forms.py文件中。

在 Django 中实例化表单

现在,我们需要在views.py文件中实例化表单。请看下面的代码。

// 视图.py

from django.shortcuts import render  
from myapp.form import StudentForm  
  
def index(request):  
    student = StudentForm()  
    return render(request,"index.html",{'form':student})  

将表单的上下文传递到索引模板中,如下所示:

// 索引.html

<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <title>Index</title>  
</head>  
<body>  
<form method="POST" class="post-form">  
        {% csrf_token %}  
        {{ form.as_p }}  
        <button type="submit" class="save btn btn-default">Save</button>  
</form>  
</body>  
</html>

在 urls.py 中提供 URL

from django.contrib import admin  
from django.urls import path  
from myapp import views  
urlpatterns = [  
    path('admin/', admin.site.urls),  
    path('index/', views.index),  
]  

运行服务器并通过localhost:8000/index在浏览器中访问表单,它将产生以下输出。

1.png

对于 <label>/<input> 对,还有其他输出选项:

  • {{ form.as_table }} 会将它们呈现为包裹在 <tr> 标签中的表格单元格
  • {{ form.as_p }} 会将它们呈现在 <p> 标签中
  • {{ form.as_ul }} 会将它们呈现在 <li> 标签中
注意:我们必须自己提供周围的 <table> 或 <ul> 元素。

标签: django语言, django教程, django技术, django学习, django学习教程, django下载, django开发, django入门教程, django进阶教程, django高级教程, django面试题, django笔试题, django编程思想