一、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),
]
urls
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="邮箱")
models
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})
views
<!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>
reg.html

 

 

    

      

 

posted on 2017-11-20 01:07  无痕5201314  阅读(210)  评论(0编辑  收藏  举报