• form校验组件


    form校验组件

    导包:

    from django import forms
    from django.forms import widgets
    
    

    定义类:

    class MyForm(forms.Form):
        username = forms.CharField(min_length=3, max_length=8, label='用户名:', error_messages={
            'min_length': '最少3位',
            'max_length': '最多8位',
            'required': '用户名不可以为空'
        }, widget=widgets.TextInput(attrs={'class': 'form-control'}))  # 可以添加样式
        password = forms.CharField(min_length=3, max_length=8, label='密码:', error_messages={
            'min_length': '最少3位',
            'max_length': '最多8位',
            'required': '密码不可以为空'
        }, widget=widgets.PasswordInput(attrs={'class': 'form-control'}))
        email = forms.EmailField(error_messages={
            'required': '你的邮箱不可以是空的',
            'invalid': '邮箱格式不正确'
        }, required=False, widget=widgets.EmailInput(attrs={'class': 'form-control'}))
    
        # 局部钩子
        def clean_username(self):
            if 'a' in self.cleaned_data.get('username'):
                self.add_error('username', '含有敏感词汇')
            return self.cleaned_data.get('username')
    
        # 全局钩子
        def clean(self):
            # 可以用来比较两个框里的东西
            username = self.cleaned_data.get('username')
            password = self.cleaned_data.get('password')
            if username != password:
                self.add_error('password', '账号密码必须一样')
            return self.cleaned_data
    

    类中的字段属性

    min_length: 最少多少位

    max_length: 最多多少位

    widget=widgets.类型Input() : 更改标签类型,还有好多中,单选按钮,复选, 下拉框

    widget=widgets.TextInput(attrs={'class': 'form-control'})): 可以添加标签

    error_messages: 更改错误提示信息

    required:

    • 在error_messages中使用:为空提示信息
    • 不在error_messages中使用: required=False 为空不提示报错

    invalid: 邮箱格式

    类中的方法

    局部钩子

    格式:

    def clean_标签的name(self):
        ...
    

    必须有返回值,拿什么返回什么

    • 通过cleaned_data拿到符合条件的数据,对数据进行进一步处理

      username = self.cleaned_data.get('username')

    • 在通过add_error('username', '你这个数据不符合我的处理条件,回去吧')这样添加对应的返回显示在前端的提示语句.

    • 最后要 return username

    全局钩子

    格式:

    def clean(self):
        ...
    

    也是必须有返回值,拿什么返回什么

    • 通过cleaned_data拿到符合条件的数据,对数据进行进一步处理

      password= self.cleaned_data.get('password')

      re_pwd= self.cleaned_data.get('re_pwd')

    • 这个的逻辑处理是比较两个框传过来的值,而不是对单一的传过来的值处理(例如: 注册的时候校验两次输入的密码)

    • 也是通过add_error('username', '你这个数据不符合我的处理条件,回去吧')这样添加对应的返回显示在前端的提示语句.

    • 最后返回的是 return self.cleaned_data

    视图函数

    def form_test(request):
        form_obj = MyForm()
        if request.method == 'POST':
            username = request.POST.get('username')
            password = request.POST.get('password')
            email = request.POST.get('email')
            form_obj = MyForm({'username': username, 'password': password,'email': email})
            
        return render(request, 'form_test.html', locals())
    

    前端显示的三种格式

    第一种

    这种是直接把input框放进p标签里面,并且根据后端的类里的数据个数去创建对应个数标签
    {{ form_obj.as_p }}
    这种是直接把input框放进ul标签里面,并且根据后端的类里的数据个数去创建对应个数标签
    {{ form_obj.as_ul }}   
    

    第二种

    <p>
    	{{ form_obj.username.label }}{{ form_obj.username }}
    </p>
    	<span>{{ form_obj.username.errors.0 }}</span>
    <p>
    	{{ form_obj.password.label }}{{ form_obj.password }}
    </p>
    	<span>{{ form_obj.username.errors.0 }}</span>
    

    第三种(推荐使用)

    {% for foo in form_obj %}
    	<p>
    		{{ foo.label }}{{ foo }}
    		<span>{{ foo.errors.0 }}</span>
    	</p>
    {% endfor %}
    
  • 相关阅读:
    点击子窗体给父窗体上的对象赋值
    框架使用及规范参考
    像Google日历一样的日程管理
    TreeView 和 Menu 的用法
    甘特图-svg版 支持客户端事件
    js获取DropDownList的选择项
    GridView,Repeater分页控件:WebPager(开源)
    TextBox 禁止客户端输入 前台通过JS赋值 并在后台获取
    对象实体 参考标准
    以编程方式控制ScriptManager
  • 原文地址:https://www.cnblogs.com/xiongchao0823/p/11762262.html
Copyright © 2020-2023  润新知