zoukankan      html  css  js  c++  java
  • django框架之Form组件的用法

    一、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

        

          

  • 相关阅读:
    Xshell 设置右键粘贴功能
    python中dict操作集合
    mac 设置网页字体
    博客收藏
    memcache 安装与简单使用
    mac安装homebrew
    Graphviz下载 使用
    jekyll 与hexo
    js 汉字排序
    初试gem
  • 原文地址:https://www.cnblogs.com/kxllong/p/7863227.html
Copyright © 2011-2022 走看看