Django的Form验证(2)

  1. Form的含义及作用:

    用于验证用户请求数据合法性的一个组件(校验数据的合法性)

  2. Django的Form实现步骤:

    • 创建一个验证用户请求的模板

      from django import forms

      class MyForm( forms.Form):

      ​ user = forms.CharField(......) input type='text'

      ​ email = forms.EmailField(......) input type='email'

      ​ pwd = forms.PasswordField(......) input type='password'

      类:模板,一共会验证几条数据

      字段:用于验证用户某个字段

      插件:user = forms.CharField(......widget=Input框) #各种框

    • 获取用户验证请求,进行验证:

      -- is_valid() 得到True或False

      -- clean() 获取正确数据

      -- errors 获取错误信息

    • Form提交:

      errors.字段.0

    • Ajax提交:

      errors.as_json() 字符串类型数据

      errors.as_data() 字典类型数据

      {'user':[Django对象(),]}

  3. field常用参数:

    required = True, 是否必填(重要参数)

    widget = None, HTML插件

    label = None, 用于生成Label标签或显示内容(也可用于光标显示)

    initial = None, 初始值(重要参数)

    help_text=' ', 帮助信息(在标签旁边显示)

    error_messages=None, 错误信息{'required':'不能为空','invalid':'格式错误'}(重要参数)

    show_hidden_initial=False, 是否在当前插件后再加一个隐藏的且具有默认值的插件(可用于检验两次输入是否一致)

    validators=[], 自定义验证规则(重要参数)

    localize=False, 是否支持本地化

    disabled=False, 是否可以编辑

    label_suffix=None, label内容后缀

  4. 注:error_messages里面的key(code)可以是以下信息出错时的值 {code=min_length message='错误信息'}

    CharField(Field):

    max_length=None,最大长度;min_length=None,最小长度;strip=True,是否移除用户输入的空白;

    IntegerField(Field):

    ​ max_value=None,最大值;min_value=None,最小值;max_digits=None,总长度;decimal_places=None,小数位长度

    BaseTemporalField(Field):

    ​ input_formats=None,时间格式化;

    DateField(BaseTemporalField) 格式:2019-12-09

    TimeField(BaseTemporalField) 格式:18:51

    DateTimeField(BaseTemporalField) 格式:2019-12-09 18:51

    DurationField(Field) 时间间隔:%d %H:%M:%S.%f

    RegexField(CharField):

    ​ regex,自定制正则表达式;max_length=None,最大长度;min_length=None,最小长度;error_message=None,忽略,错误信息使用 error_messages={'invalid':'...'}

    EmailField(CharField),同理RegexField方法的使用方式类似

    FileField(Field):

    ​ allow_empty_file=False,是否允许空文件

    ImageField(Field):

    ​ 注:需要PIL模块,pip3 install Pillow 以上两个字典使用时,需要注意两点:

    	-  form表单中 enctype = "multipart/form-data"
    - view函数中 obj = MyForm(request.POST,request.FILES) --->(如果信息和文件都要一起接收要双选)

    ChoiceField(Field):

    ​ choices=[ ] 选项,如:choices = [(1,'上海'),(2,'北京'),(3,'成都'),]

    ​ required=True 是否必填

    ​ widget=None 插件,默认select插件

    ​ label = None, 用于生成Label标签或显示内容(也可用于光标显示)

    ​ initial = None, 初始值(重要参数)

    ​ help_text=' ', 帮助信息(在标签旁边显示)

    TypedChoiceField(ChoiceField):

    ​ coerce = lambda val:val 对选中的值进行一次转换

    ​ empty_value=' ' 空的默认值

    MultipleChoiceField(): 多选框

    ComboField(Field):

    ​ fields=[ ] 使用多个验证,例:fields.ComboField(fields=[fields.CharField(max_length=20),fields.EmailField(),])

    ​ 即验证最大长度20,又验证邮箱格式

    MultiValueField(Field):

    ​ PS:抽象类,子类中可以实现聚合多个字典去匹配一个值,要配合MultiWidget使用

    ​ 指自定制验证框(通过继承实现自动生成多个需要的框)

    FilePathField(ChoiceField) 文件选项,目录下文件显示在页面中

    ​ path 文件夹路径

    ​ match=None 正则匹配

    ​ recursive=False 递归下面的文件夹

    ​ allow_files=True 允许文件

    ​ allow_folders=False 允许文件夹

    ​ required=True 是否必填

    ​ widget=None 插件,默认select插件

    ​ label = None, 用于生成Label标签或显示内容(也可用于光标显示)

    ​ initial = None, 初始值(重要参数)

    ​ help_text=' ', 帮助信息(在标签旁边显示)

    GenericIPAddressField

    ​ protocol='both', both,ipv4,ipv6支持的IP格式

    ​ unpack_ipv4=False 解析ipv4地址,如果是::ffff:192.0.2.1时,可以解析为192.0.2.1,PS:protocol必须为both才能启用

    SlugField(CharField) 数字,字母,下划线,减号(连字符)

    UUIDField(CharField) uuid类型

    注:UUID是根据MAC以及当前时间等创建的不重复的随机字符串

    例:

    <!-- 前端代码块 -->
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
    <body>
    <form action="/index/" method="POST">
    <p>{{ obj.user }}{{ obj.userID }}{{ obj.userChoice }}{{ obj.userChoice2 }}{{ obj.userChoice3 }}</p>
    <p>{{ obj.usertype }}{{ obj.userChoice4 }}</p>
    <p>{{ obj.usernull }}{{ obj.userlabel.label_tag }}{{ obj.userlabel }}</p>
    <p>{{ obj.userinitial }}{{ obj.uservalidators }}{{ obj.userdisable }}{{ obj.usererror }}</p>
    <p>{{ obj.usermultiple }}</p>
    <p><input type="submit" value="提交"></p>
    </form>
    </body>
    </html>
    #后端代码块
    #author:wylkjj
    #date:2019/12/9
    from django.core.validators import RegexValidator
    from django.shortcuts import render
    from django import forms
    from django.forms import widgets
    #-*- coding:utf-8 -*-
    class myField(forms.Form):
    #password属性框
    user = forms.CharField(widget=widgets.PasswordInput)
    #text属性框
    userID = forms.CharField(widget=widgets.TextInput(attrs={'class':'txts','placeholder':'hello!'})) #添加属性
    #select属性框第一种书写方式:获取到的值是默认的str类型
    userChoice = forms.ChoiceField(choices=[(1,'上海'),(2,'北京'),(3,'成都'),])
    #select属性框第二种书写方式: 结合IntegerField() 获取int类型值
    userChoice2 = forms.CharField(widget=widgets.Select(choices=[(1,'上海'),(2,'北京'),(3,'成都'),]))
    userChoice3 = forms.IntegerField(widget=widgets.Select(choices=[(1,'上海'),(2,'北京'),(3,'成都'),]))
    #返回值int属性框
    usertype = forms.IntegerField() #数据转换 转换为数字类型,而不是字符串类型,选择框的属性
    #互斥select属性框
    userChoice4 = forms.IntegerField(widget=widgets.RadioSelect(choices=[(1,'上海'),(2,'北京'),(3,'成都'),]))
    #是否允许字段值必填(默认情况下required的值为True,不允许字段无值)
    usernull = forms.CharField(required=True)
    #显示参数添加光标(label)
    userlabel = forms.CharField(label="光标")
    #初始值
    userinitial = forms.CharField(initial="ppt")
    #自定义验证规则(可指定code的名)
    uservalidators = forms.CharField(initial="ppt",validators=[RegexValidator(r'^[0-9]+$','11111',code='f1')])
    #是否可以进行编辑
    userdisable = forms.CharField(initial="ppt",disabled=True)
    #错误信息
    usererror = forms.CharField(initial="ppt",
    max_length=6,
    validators=[RegexValidator(r'^[0-9]+$','11111',code='f1')],
    error_messages={'required':'不允许为空',
    'invalid':'格式错误',
    'f1':'asd',
    'max_length':'ChaoGuoZuiDaChangDu'})
    #多选框
    usermultiple = forms.MultipleChoiceField(
    initial=[1,2], #初始选中值
    choices=[(1,'上海'),(2,'北京'),(3,'成都'),])
    def index(request):
    if request.method == "GET":
    obj = myField()
    return render(request, "index.html", {"obj": obj})
    elif request.method == "POST":
    obj = myField(request.POST)
    obj.is_valid()
    print(obj.clean())
    return render(request, "index.html", {"obj": obj})

Django的Form验证(2)的更多相关文章

  1. Django的Form验证

    Django的Form验证 Form验证:Form提交Form表单数据验证 针对Form提交的数据进行验证 创建模板 class loginForm() 请求提交给模板,创建对象 obj=loginF ...

  2. Django中Form验证

    Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 一,Form验证 第一种操作:主要是这三个函数 ...

  3. django 使用form验证用户名和密码

    form验证可以减少查询数据库,所以代码先预先验证,有问题可以返回给前端显示 1.在users文件夹下新建forms.py文件,用来验证用户名和密码是否为空,密码长度是否大于6 # -*- codin ...

  4. django的form验证机制

    今天遇到了一个奇怪的问题,django中formview一直返回200,但是却没有执行form_valid方法,然后在其中加了一个form_invalid方法: class StudentRegist ...

  5. Django之Form验证

    view.py 配置 from django import forms from django.forms import fields # Create your views here. class ...

  6. Python Django的分页,Form验证,中间件

    本节内容 Django的分页 Form 中间件 1 Django 分页 1.1 Django自带的分页 1.首先来看下我的测试数据环境 ############ models.py ######### ...

  7. Django form验证

    # 模版 class LoginForm(forms.Form): # 模版中的元素 user = forms.CharField(min_length=6,error_messages={" ...

  8. [py][mx]django form验证-给db减压

    django form认证-解压db压力 一般系统都需要前后端都验证 前端验证容器逃逸破解,如通过js console口去发 试想如果后端只有db验证,那么前端无论发什么后端都查询一次db,对db压力 ...

  9. Django 博客项目02 Form验证+ 上传头像(预览)+Ajax用户注册

    头像预览 $("#avatar_file").change(function(){ // 获取上传的文件对象 var file=$(this)[0].files[0]; // 读取 ...

随机推荐

  1. 抖音抖一抖-SVG和CSS视觉故障艺术小赏

    故障艺术,英文名称叫glitch,在很多赛博朋克作品中经常看到,其实就是故意表现一种显示设备的小故障效果,抖音的图标其实就是这种的效果,我们看下这个图标 这个图标中的红色和蓝色的偏移其实就是一种故障艺 ...

  2. UVA439 骑士的移动 Knight Moves

    #include<bits/stdc++.h> using namespace std; char a,c; int b,d; ][]; ]={,,,-,,-,-,-}; ]={,-,,, ...

  3. mysql 中文不显示问题

    MySQL的字符集支持(Character Set Support)有两个方面: 字符集(Character set)和排序方式(Collation).对于字符集的支持细化到四个层次: 服务器(ser ...

  4. java 抽象类和接口整理

    java中定义一些不含方法体的方法,方法体的实现交给该类的子类根据自己的具体情况去实现,这样的方法就是abstract修饰的抽象方法,包含抽象方法的类叫抽象类,用abstract修饰 抽象方法: ab ...

  5. python calendar 时间处理类库

    #python中的calendar import calendar #返回指定年的某月 def get_month(year, month): return calendar.month(year, ...

  6. 网络OSI七层模型以及数据传输过程

    网络OSI七层模型 模型图 国际标准化组织(ISO)制定了osi七层模型,iso规定了各种各样的协议,并且分了7层 每一层的详细信息 具体7层 数据格式 功能与连接方式 典型设备 应用层 Applic ...

  7. java基础(3)--详解String

    java基础(3)--详解String 其实与八大基本数据类型一样,String也是我们日常中使用非常频繁的对象,但知其然更要知其所以然,现在就去阅读源码深入了解一下String类对象,并解决一些我由 ...

  8. 微信小程序——页面栈

    刚开始用小程序的时候没怎么在意页面的跳转,也没仔细看文档中说的页面栈的内容.只要能跳转就行,wx.navigateTo,wx.redirectTo 这些方法一顿乱用.最后在做一个十层页面(以前页面栈是 ...

  9. 性能达到原生 MySQL 七倍,华为云 Taurus 技术解读【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  10. 【nodejs原理&源码赏析(3)】欣赏手术级的原型链加工艺术

    [摘要] 学习经典代码中的prototype加工 示例代码托管在:http://www.github.com/dashnowords/blogs 好的代码都差不多,烂的代码却各有各的烂法. 一. 概述 ...