zoukankan      html  css  js  c++  java
  • Django-forms效验组件

    forms效验组件

    可以帮我们快速的进行字段的判断

    用法记忆

    1. from django import forms 导入模块
    2. class UserForm(forms.Form): 创建类
      name=forms.CharField(min_length=4,lable='姓名')
    3. form = UserForm(request.POST) 实例化可以传递参数也可以不用传递参数
    4. form.is_valid() 校验字段
    5. form.cleaned_data 校验成功的字段
    6. form.errors 校验失败的字段
    7. form.name 模板中渲染input
    8. form.name.errors 模板中渲染当前字段的错误信息
    9. from django.forms import widgets 导入设置字段属性的模块
    10. 字段的属性设置
      lable='姓名' 设置字段中文名
      widgets = PasswordInput() 设置字段渲染type属性为password
      widgets = TextInput() 设置字段渲染type属性为text
      widgets = TextInput(attrs={"class":"form-contrl"}) 设置inpu标签的属性
      error_messages = {'required':'该字段不能为空'} 配置显示的错误信息,key不能修改
      error_messages = {'invalid':'格式错误'} 格式错误

    创建类

    class UserForm(forms.Form):
        name=forms.CharField(min_length=4,lable='姓名')
        email = forms.EmailField(lable='邮箱')
    

    froms组件的字段参数配置

    1. from django.forms import widgets 首先 导入模块
    2. name=forms.CharField(min_length=4,lable='姓名',widgets = PasswordInput)
    3. 字段属性的设置
      widgets = PasswordInput() 设置字段渲染type属性为password
      widgets = TextInput() 设置字段渲染type属性为text
      widgets = TextInput(attrs={"class":"form-contrl"}) 设置inpu标签的属性
      error_messages = {'required':'该字段不能为空'} 配置显示的错误信息,key不能修改
      error_messages = {'invalid':'格式错误'} 格式错误

    在视图函数中实例化

    form = UserForm(request.POST) 实例化Form对象

    校验方法

    form.is_valid() #校验提交的字段是否符合信息,返回布尔值

    1. 如果 form.is_valid() 为True form.cleaned_data 返回值是字典,所有的效验成功的字段,和字段值,
    2. 如果form.is_valid() 为False form.errors 返回的是字典,所有校验失败的字段,和字段值,form.cleaned_data 返回值是字典,所有的效验成功的字段,和字段值,
    3. form.cleaned_data 所有的效验成功的字段,和字段值
    4. form.errors 返回的是字典,所有校验失败的字段,和字段值,form.cleaned_data 返回值是字典,所有的效验成功的字段,和字段值,

    在模板中渲染form

    1. form = UserForm() 首先实例化form对象,不传递参数
    2. 把变量出入模板中
    3. 可以form.name进行input的标签渲染,或者进行for循环渲染,在或者{{from.as_p}} {{from.as_ul}} 把所有字段渲染出来 _p ,_ul 这个代表渲染出来的标签
    4. 进行渲染时可以取出lable属性 如 form.name.lable

    渲染错误信息

    1. form = UserForm(request.POST)当有参数实例化时 在模板中渲染会把你传进来的值,渲染进去
    2. form.name.errors 存放的是当前字段错误信息的列表,这里是name字段信息的错误列表
    3. form.name.errors.0 取出错误信息

    自定义forms组件校验规则

    from django.core.exceptions import ValidationError
    class UserForm(forms.Form):
        name=forms.CharField(min_length=4,lable='姓名')
        email = forms.EmailField(lable='邮箱')
        
        # 局部钩子
        def clean_name(self):
            val=self.cleaned_data.get("name")
            if not val.isdigit():
                return val
            else:
                raise ValidationError("用户名不能是纯数字!")
        # 全局钩子
        def clean(self):
            pwd=self.cleaned_data.get("pwd")
            r_pwd=self.cleaned_data.get("r_pwd")
            if pwd and r_pwd:
                if pwd==r_pwd:
                    return self.cleaned_data
                else:
                    raise ValidationError('两次密码不一致!')
            else:
                return self.cleaned_data
        def register(request):
    
            if request.method=="POST":
                form=UserForm(request.POST)
                if form.is_valid():
                    print(form.cleaned_data)       # 所有干净的字段以及对应的值
                else:
                    clean_error=form.errors.get('__all__')
    
                return render(request,"register.html",locals())
            form=UserForm()
            return render(request,"register.html",locals())
    

    注意

    1. 使用局部钩子时用一定要用 clean_开头 加字段名去命名 如clean_name
    2. 全局错误信息会放到form.errors字段 __all__对应的值中
  • 相关阅读:
    libTIFF 图像读取与保存
    MarkDown写作之嵌入LaTeX和HTML
    R语言学习(一)前言
    Multi-Byte Character Set & Unicode Character Set
    C/C++ ShellExecuteEx调用exe可执行文件
    C/C++中相对路径与绝对路径以及斜杠与反斜杠的区别
    观察者模式
    责任链模式
    桥接模式
    void及void指针含义的深刻解析
  • 原文地址:https://www.cnblogs.com/tianhen/p/11261654.html
Copyright © 2011-2022 走看看