zoukankan      html  css  js  c++  java
  • Django学习笔记之form组件的局部钩子和全局钩子

    本文通过注册页面的form组件,查看其中使用的全局钩子和局部钩子。

    # Create your views here.
    class RegForm(forms.Form):
        username = forms.CharField(
            min_length=3,
            label="用户名",
            help_text=‘‘,
            error_messages={
                "required": "不能为空",
                "invalid": "格式错误",
                "min_length": "用户名最短8位"
            }
        )
        password = forms.CharField(
            min_length=3,
            label="密码",
    
            help_text=‘6~16个字符,区分大小写‘,
            error_messages={
                "required": "不能为空",
                "invalid": "格式错误",
            },
            widget=forms.widgets.PasswordInput
        )
    
        re_password = forms.CharField(
            min_length=3,
            label="确认密码",
    
            help_text=‘请再次填写密码‘,
            error_messages={
                "required": "不能为空",
                "invalid": "格式错误",
            },
            widget=forms.widgets.PasswordInput)
    
        gender = forms.fields.ChoiceField(
            choices=((1, ""), (2, ""), (3, "保密")),
            label="性别",
            initial=3,
            widget=forms.widgets.RadioSelect
        )
        
        phone = forms.fields.CharField(
            label="电话",
            error_messages={
                "required": "不能为空",
            },
        )
    
        email = forms.fields.CharField(
            label=‘邮箱‘,
            help_text=‘6~18个字符,可使用字母、数字、下划线‘,
            widget=forms.widgets.EmailInput,
            error_messages={
                "required": "不能为空",
                "invalid": "格式错误",
            },
        )
        
        # 批量给form表单里的字段加样式
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            for field in iter(self.fields):
                field_obj = self.fields[field]
                if not isinstance(field_obj, forms.fields.ChoiceField):
                    field_obj.widget.attrs.update({‘class‘: ‘form-control‘})
        
        # 全局钩子,此处用来判断两次输入的密码 
        def clean(self):
            pwd = self.cleaned_data.get(‘pwd‘)
            re_pwd = self.cleaned_data.get(‘re_pwd‘)
            if pwd != re_pwd:
                self.add_error(‘re_pwd‘, ‘两次密码不一致‘)
                raise ValidationError(‘两次密码不一致‘)
            else:
                return self.cleaned_data
        
        # 局部钩子函数,写给phone的校验函数
        def clean_phone(self):
            phone = self.cleaned_data.get(‘phone‘)
            if not re.findall(‘^1[0-9]{10}$‘, phone):
                raise ValidationError("格式错误!")
            else:
                return phone

    关于钩子函数:

    源码里的  forms/forms.py

    源码中的钩子函数应用

     

  • 相关阅读:
    Maven项目中的配置文件找不到以及打包问题
    企业信息化快速开发平台 JeeSite
    http缓存浅谈
    <mvc:annotation-driven />注解意义
    Spring中报"Could not resolve placeholder"的解决方案
    eclipse怎么停止building workspace
    利用mybatis-generator自动生成代码
    Java 8 中的 Streams API 详解
    tomca配置文件自动还原问题的解决 server.xml content.xml 等
    tomcat 修改默认字符集
  • 原文地址:https://www.cnblogs.com/JetpropelledSnake/p/9397889.html
Copyright © 2011-2022 走看看