zoukankan      html  css  js  c++  java
  • doraemon的python form组件(国庆大更新)

    ### 11.12 form组件
    
    form组件的功能:
    
    1. 生产input标签
    2. 对提交的数据进行校验
    3. 提供错误提示
    
    
    
    定义form组件
    
    ```python
    from django import forms
    
    class RegForm(forms.Form):
        username = forms.CharField()
        pwd = forms.CharField()
    ```
    
    
    
    使用的流程
    
    视图
    
    ```python
    form_obj = RegForm()
    form_obj = RegForm(request.POST)
    form_obj.is_valid():  #对数据进行校验
        print(form_obj.cleaned_data)  #通过检验的数据
        return render(request,'regs.html',{'form_obj':form_obj})
    ```
    
    模板
    
    ```html
    {{form_obj.as_p}}   ----> 生产一个个p标签 input label
    {{form_obj.errors}}    ----->form表单中所有字节的错误
    {{form_obj.username}}    ----->一个字段对应的input框
    {{form_obj.username.label}}  ---》该字段的中文提示
    {{form_obj.username.id_for_label}}   ----->该字段的input框的id
    {{form_obj.username.errors}} ---->给字段的所有错误
    {{form_obj.username.errors.0}}   ---->该字段的第一个错误
    ```
    
    常用字段
    
    ```python
    CharField    
    ChoiceField 
    MultipleChoiceField  
    ```
    
    字段参数
    
    ```python
    required=True        是否允许为空
    widget=None            html插件
    label=None            用于生成label的标签或者显示内容
    initial = None       初始值
    error_message=None     错误信息 {'required':'不能为空''invalid':'格式错误'}
    validators=[函数名]   自定义验证规则
    disabled=False         是否可以编辑
    ```
    
    
    
    验证
    
    1.内置验证
    
    ```python
    required=True
    min_length
    max_length
    ```
    
    2.自定义校验器:
    
    ​    1.写函数
    
    ```python
    def checkname(value):
        #通过校验规则 不做任何操作
        #不通过校验规则 抛出异常
        if 'liujia' in value:
            raise ValidationError('不合格我的想法')
    ```
    
    ​    2.使用内置的检器
    
    ```python
    from django.core.validators import RegexValidator
    ```
    
    3.钩子函数
    
    ​    1.局部钩子
    
    ```python
    def clean_字段名(self):
        # 局部钩子
        # 通过校验规则  必须返回当前字段的值
        # 不通过校验规则   抛出异常
        raise ValidationError('不符合社会主义核心价值观')
    ```
    
    ​    2.全局钩子
    
    ```python
    def clean(self):
        # 全局钩子
        # 通过校验规则  必须返回当前所有字段的值
        # 不通过校验规则   抛出异常   '__all__'
        pass
    ```
    
    is_valid的流程:
    
    1.执行full_clean()的方法:
    
    定义错误字典
    
    定义存放清洗数据的字典
    
    2.执行_clean_fields方法:
    
    ​    循环所有的字段
    
    ​    获取当前的值
    
    ​    对进行校验 ( 内置校验规则   自定义校验器)
    
    1. 通过校验
    
       self.cleaned_data[name] = value 
    
       如果有局部钩子,执行进行校验:
    
       通过校验——》 self.cleaned_data[name] = value 
    
       不通过校验——》     self._errors  添加当前字段的错误 并且 self.cleaned_data中当前字段的值删除掉
    
       2. 没有通过校验
    
       self._errors  添加当前字段的错误
    
    3.执行全局钩子clean方法
  • 相关阅读:
    我倾向于使用发布版本进行调试,而不是使用调试版本
    常见WinDbg问题及解决方案
    在崩溃转储中查找所有可能的上下文记录
    向C/C++程序员介绍Windbg 脚本
    VS 使用技巧(1)
    Windows资源监视器软件的原理
    微架构、指令集架构与汇编语言的关系
    调试寄存器 原理与使用:DR0-DR7
    如何学习调试?
    WinDbg: 执行 SOS 扩展命令 !clrstack时报错 Access violation exception (0xC0000005)
  • 原文地址:https://www.cnblogs.com/doraemon548542/p/11638571.html
Copyright © 2011-2022 走看看