zoukankan      html  css  js  c++  java
  • 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 %}
    
  • 相关阅读:
    USACO Milk2 区间合并
    Codeforces 490B Queue【模拟】
    HDU 3974 Assign the task 简单搜索
    HDU 5119 Happy Matt Friends(2014北京区域赛现场赛H题 裸背包DP)
    Cin、Cout 加快效率方法
    POJ 1159 回文LCS滚动数组优化
    POJ 2479 不相交最大子段和
    POJ 1458 最长公共子序列 LCS
    在阿里最深刻的,还是职场之道给我的震撼
    精细化
  • 原文地址:https://www.cnblogs.com/xiongchao0823/p/11762262.html
Copyright © 2011-2022 走看看