• django中的form表单验证


    一. form表单验证

      form可以生成html标签,可以校验,可以保留上次输入内容

      1. 创建form表单

    from django import forms
    
    class MyForm(forms.Form):
        username = forms.CharField(
            label = "用户名",    #
            min_length = 6,
            validators=[]   ,    # 校验器
            widget=forms.TextInput(attrs={}) , # 小插件
    )
    
    常用的form字段
    CharField()
    ChoiceField()
    
    常用的内置字段
    label                      用于生成label标签或者显示内容
    required=True        是否可以为空
    error_messages={}    错误信息{"required":"不能为空"}
    widget                    小插件
    help_text=""            帮助信息
    validators=[]           校验器,可以使用Regexvalidator()
              from djang.core.validators impor Regexvalidator
                                   还可以自定义校验器
    initial=xxx                 默认值
    strip=True                 移除两端空白
    choices=((1,""))      选项
            
    插件中常用的种类
    PasswordInput        密码框
    Select()                  单选下拉框
    RadioSelect()           单选按钮
    
    读取数据库中内容,作为选项
    name = ModelMultipleChoiceField(
        queryset = models.userinfo.objects.all()
    )
    form表单

      2. 在view中的方法

        from_obj = MyForm()    创建对象,用来渲染页面

        form_obj = MyForm(request.POST)  把post提交的数据进行校验

        form_obj.is_valid()      判断是否校验成功

        form_obj.cleaned_data    在is_valid()之后使用,获取所有校验完的数据

        form_obj.error.as_data    获取错误信息字典形式的对象

        form_obj.add_error("字段","错误信息")  给某个字段添加错误信息

        form_obj.fields        存有字段的有序字典

    二. RegexValidator校验器

      校验器一般是根据正则来校验是否符合

      1. RegexValidator校验器

        from django.core.validators import RegexValidator

        validators = [RegexValidator(r"正则","错误信息")...]

      2. 自定义校验器

    import re
    from django.core.exceptions import ValidationError
    
    def my_validator(value):
        reg = re.compile(r"正则")
        if not reg.match(value):
            raise ValidationError("错误信息")
    
    validators = [my_validator,...]
    根据re自定义校验器

    三. hook钩子

      在创建的form字段类中加hook钩子

      1. 局部钩子

    def clean_字段(self):
        value = self.cleaned_data.get("字段")
        if 验证value条件:
             raise ValidationError("错误信息")    # 错误时
        else:
            return value    # 成功时要返回value
    局部钩子

      2. 全局钩子

    def clean(self):
        value = self.cleaned_data.get("字段")
        if 校验条件:
            self.add_error("字段","错误信息")    #给某个字段添加错误
            # raise ValidationError("错误信息")  # 给全局添加错误
        else:
            return cleaned_data        # 返回全部信息
    全局钩子

    四. 校验顺序

      1. 个人猜测版

      字段校验 => 验证器=> 局部钩子 => 全局钩子

      2. 网上搜索版

        先来归纳一下整个流程

        (1)首先is_valid()起手,看seld.errors中是否值,只要有值就是flase

        (2)接着分析errors.里面判断_errors是都为空,如果为空返回self.full_clean(),否则返回self._errors

        (3)现在就要看full_clean(),是何方神圣了,里面设置_errors和cleaned_data这两个字典,一个存错误字段,一个存储正确字段。

        (4)在full_clean最后有一句self._clean_fields(),表示校验字段

        (5)在_clean_fields函数中开始循环校验每个字段,真正校验字段的是field.clean(value),怎么校验的不管

        (6)在_clean_fields中可以看到,会将字段分别添加到_errors和cleaned_data这两个字典中

        (7)结尾部分还设置了钩子,找clean_XX形式的,有就执行。执行错误信息也会添加到_errors中

        (8)整个校验过程完成

  • 相关阅读:
    1024 Palindromic Number (25分)
    Fliptile POJ 3279
    ASP.NET MVC中的TempData机制
    Entity Framework中的批量提交与分布式事务处理
    MongoDB学习笔记
    在Entity Framework中实现指定字段更新
    bootstrap 对话框调用 iframe
    MVC PartialView视图使用心得
    何时使用PartialView方法
    ASP.NET MVC3调用PartialView的几种方式
  • 原文地址:https://www.cnblogs.com/q767498226/p/10527669.html
Copyright © 2020-2023  润新知