Django 表单(10)
本文是Django教程的一部分,您可以点击Django教程系列查看所有教程。
Django 表单简介
对于 Web 应用程序,创建表单是一项关键功能,这些表单充当用户键入的输入进入应用程序的关键来源。可以以精确的方式进一步验证和处理该用户键入的输入。这些是表单处理的关键功能之一。Django提供了一组分类的方法来制定表单实体。
如何创建 Django 表单?
创建一个 Django 表单步骤如下:
1.在应用程序中创建一个forms.py文件
forms.py 文件与models.py 类似,表单中使用的所有字段都将在这里声明在一个表单类下。
示例 – forms.py
from django import forms
class Valueform(forms.Form):
user = forms.CharField(max_length = 100)
2. 为表单创建一个视图
为 views.py 文件中的表单创建了一个 Django 视图方法。表单类的对象在此处创建。此对象用作模板渲染中上下文字典的值。
示例——views.py
from django.shortcuts import render
from django.http import HttpResponse
from Django_app1.forms import Valueform
defform_view(request_iter):
form = Valueform()
return render(request_iter,'Form_Handeling.html', {"form": form})
3. 制定一个用于显示表单的 HTML 文件
需要在模板目录中创建一个 HTML 文件来显示表单,这里的文件使用以下标签进行模板标记,
{{ form.as_p}}
这里“as_p”用于更好地设计表单元素。{% csrf_token %} 行用于证明 django 执行的内部安全验证。
例子
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Django App1</title>
</head>
<body>
<h1><u> FORMS HANDELING IN DJANGO </u></h1
<div style = "max-width:470px;">
{{ form.as_p }}
{% csrf_token %}
<input type="submit" class="btnbtn-primary" value="submit">
</div>
</body>
</html>
4. 在 urls.py 文件中标记视图
这是为视图创建 url 的过程。
- 从 django.conf.urls import url 导入库
- 在 urlpatterns 列表中声明一个 url 条目
url(url_path,view_to_be_tagged,name_for_this_view)
例子
from django.contrib import admin
from django.conf.urls import url
from Django_app1 import views
urlpatterns = [
url(r'^$',views.index,name='index'),
url(r'formpage/',views.form_view,name='form'),
url(r'admin/', admin.site.urls), ]
输出:
Django 表单中可用的所有表单字段
django 表单中可用的表单字段如下所示:
字段类型 | Django 表单字段类型 | HTML 输出 | 描述 | Django 组件 |
Boolean | forms.BooleanField() | <input type=’checkbox’> | 创建一个布尔字段 | forms.widgets.CheckboxInput() |
Boolean | forms.NullBooleanField() | <select> <option value=”1″ selected=”selected”> Unknown </option> <option value=”2″> Yes </option> <option value=”3″> No </option> </select> |
与布尔字段非常相似,但也允许未知值 | forms.widgets.NullBooleanSelect() |
Text | forms.CharField() | <input type=”text”> | 创建一个简单的字符域 | forms.widgets.TextInput() |
Text | forms.EmailField() | <input type=”email”> | 为电子邮件输入创建一个字段 | forms.widgets.EmailInput() |
Text | forms.GenericIPAddressField() | <input type=”text”> | 允许插入IP地址 | forms.widgets.TextInput() |
Text | forms.RegexField( regex=’regular_expression’) | <input type=”text”> | 一个基本的字符字段,但这里验证发生在服务器端 | forms.widgets.TextInput() |
Text | forms.SlugField() | <input type=”text”> | 一个基本字符字段,但只允许输入小写值 | forms.widgets.TextInput() |
Text | forms.URLField() | <input type=”url”> | 允许插入网址 | forms.widgets.URLInput() |
Text | forms.UUIDField() | <input type=”text”> | 基本字符字段,但服务器端 django 验证值是否可转换为 UUID(通用唯一 ID) | forms.widgets.TextInput() |
Text | forms.ComboField(fields=[field_type#1,field_type#2]) | <input type=”text”> | 像 CharField 一样工作,Heredjango 表单字段在服务器端使用数据传递规则强制执行。. | forms.widgets.TextInput() |
Text | forms.MultiValueField(fields=[field_type#1, field_type#1]) | <input type=”text”> | 允许以自定义方式创建表单字段。 | forms.widgets.TextInput() |
Text / Files | forms.FilePathField( path=’directory’) | <select> <option value=”directory/file_1″> file_1 </option> <option value=”directory/file_2″> file_2 </option> <option value=”directory/file_3″> file_3 </option> </select> |
该字段用于保存目录的路径 | forms.widgets.Select() |
Files | forms.FileField() | <input type=”file”> | 创建一个字段,用户可以通过该字段将文件附加到表单 | forms.widgets.ClearableFileInput() |
Files | forms.ImageField() | <input type=”file”> | 创建一个字段,用户可以通过该字段将图像附加到表单 | forms.widgets.ClearableFileInput() |
Date/time | forms.DateField() | <input type=”text”> | 像基本字符字段一样工作,但在服务器端,django 设置会验证插入的值是否为日期格式。(例如 2020-11-23、11/23/20)。 | forms.widgets.DateInput() |
Date/time | forms.TimeField() | <input type=”text”> | 像基本字符字段一样工作,但在服务器端,django 设置会验证插入的值是否为时间格式。(例如 15:41:32、11:44)。 | forms.widgets.TextInput() |
Date/time | forms.DateTimeField() | <input type=”text”> | 像基本字符字段一样工作,但在服务器端,django 设置会验证插入的值是否为日期时间格式。(例如 2020-11-15 12:30:59, 11/15/20 13:30)。 | forms.widgets.DateTimeInput() |
Date/time | forms.DurationField() | <input type=”text”> | 像基本字符字段一样工作,但在服务器端,django 设置会验证插入的值是否要转换为时间增量。 | forms.widgets.TextInput() |
Number | forms.IntegerField() | <input type=”number” | 在服务器端 django 验证输入字段是否为有效整数 | forms.widgets.NumberInput() |
Number | forms.DecimalField() | <input type=”number” | 在服务器端 django 验证输入字段是否是有效的十进制。 | forms.widgets.NumberInput() |
Number | forms.FloatField() | <input type=”number” | 在服务器端 django 验证输入字段是否为浮点类型。 | forms.widgets.NumberInput() |
Example – forms.py
下面的 forms.py 文件包含上面提到的几个作为应用程序声明和执行的表单字段。
#-*- coding: utf-8 -*-
from django import forms
class Valueform(forms.Form):
first_name = forms.CharField(max_length = 100)
last_name = forms.SlugField()
gender = forms.BooleanField()
Ip = forms.GenericIPAddressField()
file = forms.FileField()
department = forms.ChoiceField(choices = (('1','CSE'),('2','IT'),('3','ECE'),('4','EEE')))
输出:
在视图中处理表单字段
可以使用表单的视图方法中的以下表单处理代码捕获和处理在表单字段中输入的值
示例——views.py
from django.shortcuts import render
from django.http import HttpResponse
from Django_app1.forms import Valueform
defform_view(request_iter):
form = Valueform()
if request_iter.method == "POST":
value = Valueform(request_iter.POST)
if value.is_valid():
print("First Name: ",value.cleaned_data['first_name'])
print("First Name: ",value.cleaned_data['last_name'])
return render(request_iter,'Form_Handeling.html', {"form": form})
在这里,当从表单提交“POST”时,它作为方法参数中请求线程的一部分传递,因此在以下语句中进行了验证,
if request_iter.method == "POST":
因此,当提交“POST”时,通过引用在 forms.py 中声明的表单类,将与 POST 请求关联的值捕获到一个对象中。使用此对象的cleaned_data[] 参数并使用相应字段的名称,可以捕获从该字段中键入的值。在这个例子中,捕获的值被打印到控制台上。在实时情况下,将对这些值进行进一步处理,例如数据库存储或服务器验证等。
输出:
总结
这是 Django Forms 的指南。在这里,我们还将讨论介绍以及如何在 Django 中创建表单以及不同的示例及其代码实现。
常见问题FAQ
- 程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
- 请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!