文章目录
1. Form组件的主要功能
- HTML form提交数据后自动保留上次提交的数据
- 对用户提交的数据进行验证并生成错误信息
- 生成HTML标签
- 初始化页面显示内容
- 实时数据更新
2. Form的处理流程
- 在应用下面创建forms.py用来存放form组件的类
- 创建form类,类里面创建前端需要传入的字段
- 在views视图函数中进行对数据验证处理,成功进行跳转到新页面和失败返回到原来的页面。
- 模板HTML渲染页面
具体代码:
– 创建类:
from django import forms
from django.forms import fields
from django.forms import widgets
# 创建MyForms类
class MyForms(forms.Form):
user = fields.CharField( # 用户名
max_length=18,
min_length=6,
required=True,
error_messages = {
"max_length": "用户名长度必须小于18位",
"min_length": "用户名长度必须大于6位",
"required": "用户名不能为空",
})
pwd = fields.CharField( # 密码
max_length=18,
min_length=6,
required=True,
error_messages={
"max_length": "密码长度必须小于18位",
"min_length": "密码长度必须大于6位",
"required": "密码不能为空",
})
gender = fields.ChoiceField( # 性别
choices=((1, '男'), (2, '女'),),
initial=2,
widget=widgets.RadioSelect
)
email = fields.EmailField( # 邮箱
required=True,
error_messages={
"Invalid": "邮箱格式有误",
"required": "邮箱不能为空",
})
– 视图函数:
from django.shortcuts import render, HttpResponse
from zhss.forms import MyForms
# 注册页面
def register(request):
if request.method == "GET":
obj = MyForms()
return render(request, "zhss/register.html", context={
"obj": obj})
if request.method == "POST":
obj = MyForms(request.POST) # 提交数据都放在request.POST里面的
if obj.is_valid(): # 进行数据验证
return HttpResponse("验证成功")
else:
return render(request, "zhss/register.html", context={
"obj": obj})
– 模板HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册</title>
</head>
<body>
<form action="{% url "zhss:register" %}" method="post">
{
% csrf_token %}
<p>用户名 {
{
obj.user }}{
{
obj.errors.user.0 }}</p>
<p>用户密码 {
{
obj.pwd }}{
{
obj.errors.pwd.0 }}</p>
<p>性别 {
{
obj.gender }}{
{
obj.errors.gender.0 }}</p>
<p>邮箱 {
{
obj.email }}{
{
obj.errors.email.0 }}</p>
<p><input type="submit" value="提交注册"></p>
</form>
</body>
</html>
3. Form常用字段
本质上字段里面封装了一个正则表达式来匹配用户数据,同时还封装了HTML插件。
'''
在源码中,Field为BASE类,其他下面的字段都是继承BASE或者其他字段的。
'''
1. Field中含有的参数:
required=True, 是否允许为空
widget=None, HTML插件
label=None, 用于生成Label标签或显示内容
initial=None, 初始值
help_text='', 帮助信息(在标签旁边显示)
error_messages=None, 错误信息 {
'required': '不能为空', 'invalid': '格式错误'}
show_hidden_initial=