Django 表单

Django 表单

Django提供了一个Form类,用于创建HTML表单。它描述了一个表单的工作方式和外观。

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

表单类的每个字段都映射到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文本输入组件。

标签用于设置组件的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>标签或提交按钮。我们需要在模板中自行提供它们。

常用的字段及其详细信息如下表所示。

名称 类别 HTML输入 空值
BooleanField class BooleanField(**kwargs) 复选框输入 False
CharField class CharField(**kwargs) 文本输入 留空值
ChoiceField class ChoiceField(**kwargs) 下拉选择输入 ”(空字符串)
DateField class DateField(**kwargs) 日期输入 None
DateTimeField class DateTimeField(**kwargs) 日期时间输入 None
DecimalField class DecimalField(**kwargs) 数字输入 None
EmailField class EmailField(**kwargs) 邮箱输入 ”(空字符串)
FileField class FileField(**kwargs) 可清除文件输入 None
ImageField class 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 文件中实例化表单。请看下面的代码。

// views.py

from django.shortcuts import render
from myapp.form import StudentForm

def index(request):
    student = StudentForm()
    return render(request,"index.html",{'form':student})

将表单的上下文传递到看起来像这样的索引模板中:

// index.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, 然后它将产生以下输出。

Django 表单

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

  • {{ form.as_table }} 将它们呈现为包裹在<tr>标签中的表格单元格
  • {{ form.as_p }} 将它们呈现为包裹在<p>标签中
  • {{ form.as_ul }} 将它们呈现为包裹在<li>标签中

注意:你必须自己提供<table><ul>元素的包围。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程