一、Form组件的作用:
1.用户请求数据验证 2.自动生成错误信息 3.打包用户输入的正确数据
二、Form的组成及结构和用法:
其实Form组件就是一个类 创建规则(类,字段): class Foo: username=xxx password=xxx email=xxx 1.规则的定义:(以给用户表添加记录为例) 首先得导入: from django.forms import Form from django.forms import fields class UserForm(Form):#(类名是自己定义的可以随意但一定要继承Form) username=fields.CharField(required=True,error_messages={"required":"用户名不能为空"}) #不能为空 error_massages为验证错误信息组成的字典 password=fields.CharField(required=True,error_message={"required":"密码不能为空"})#不能为空 email=fields.EmailField(required=Trueerror_massage={"required":"邮箱不能为空","invalid":"邮箱格式错误"}) #不能为空且为固定的邮箱格式 #注意:这儿的CharField与models中的CharField是不一样的一定去分开,这儿的CharField是Form的里边的max_length可有可无,而models中的必须要有而且这儿的CharField必须要有required=True(不能为空) 2.数据和规则进行匹配: form=UserForm(data=request.POST)#这一步只是把规则和数据放置到一起(类的实例化) if form.is_valid(): #开始进行匹配验证,并且获取校验结果 models.UserInfo.create(**form.cleaned_data)#cleaned_data必须加把form转换为字典 else: #(验证失败) return render(request,"reg.html",{"form":form}) #直接返回注册页面,用{{form.errors.字段名.0}}取到每个字段的错误信息
具体的代码实例:
from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^reg/', views.reg), ]
from django.db import models # Create your models here. class UserInfo(models.Model): nid = models.BigAutoField(primary_key=True) username =models.CharField(max_length=32,verbose_name="用户名",) password=models.CharField(max_length=16,verbose_name="密码") email = models.CharField(max_length=64,verbose_name="邮箱")
from django.shortcuts import render,HttpResponse from app01 import models from django.forms import Form from django.forms import fields # Create your views here. class UserForm(Form): username = fields.CharField(required=True,error_messages={"required":"用户名不能为空"},) # 不能为空 password = fields.CharField(required=True,error_messages={"required":"密码不能为空"},) # 不能为空 email = fields.EmailField(required=True,error_messages={"required":"邮箱不能为空",'invalid':"邮箱格式错误"}) # 不能为空且为固定的邮箱格式 def reg(request): if request.method=="GET": form = UserForm() return render(request, 'reg.html', {'form': form}) else: print(request.POST) form = UserForm(data=request.POST) # 这一步只是把规则和数据放置到一起 if form.is_valid(): # 开始进行匹配验证,并且获取校验结果 print(form.cleaned_data) models.UserInfo.objects.create(**form.cleaned_data) return HttpResponse("ok") else: from django.forms.utils import ErrorDict # print("操作失败",form.errors["username"][0],form.errors["password"][0],form.errors["email"][0]) return render(request, 'reg.html', {'form': form})
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/reg/" method="post"> {% csrf_token %} <p><input type="text" name="username">{{ form.errors.username.0 }}</p> <p><input type="password" name="password">{{ form.errors.password.0 }}</p> <p><input type="text" name="email">{{ form.errors.email.0 }}</p> <p><input type="submit" name="submit" value="提交"></p> </form> </body> </html>