zoukankan      html  css  js  c++  java
  • python测试开发django-103.form表单自定义校验规则(validators)

    前言

    from表单常见的校验方式,常用的 CharField 可以传以下三个参数

    • min_length 最小长度
    • max_length 最大长度
    • required 是否是必填的

    对于复杂一点的校验,需要自己写检验器了,比如:判断输入的账号必须是test开头

    自定义校验validators

    在 CharField 传validators参数,传值是一个list,里面是函数对象名称,可以有多个校验函数。

    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    
    
    def check_username(value):
        """校验username 以test开头"""
        if not str(value).startswith("test"):
            raise ValidationError('参数不合法,必须以test开头')
    
    
    class LoginForm(forms.Form):
        """登录Form表单"""
        username = forms.CharField(max_length=20,
                                   min_length=3,
                                   required=True,
                                   label="用户名",
                                   validators=[check_username],
                                   error_messages={
                                       'required': '用户名不能为空',
                                       'min_length': '用户名不能少于3位字符',
                                       'max_length': '用户名不能大于20位字符',
                                       'invalid': '参数不合法,格式错误'
                                   })
        password = forms.CharField(max_length=16,
                                   min_length=6,
                                   required=True,
                                   label="密码",
                                   widget=forms.PasswordInput,
                                   error_messages={
                                       'required': '密码不能为空',
                                       'min_length': '密码不能少于6位字符',
                                       'max_length': '密码不能大于16位字符',
                                   })
    
    

    模板中引用报错

    模板中引用errors

    <form action="" method="POST" id="login-form" style="text-align:center;">
        {% csrf_token %}
        {% for field in form_obj %}
            <p>
                {{ field.label_tag }}
                {{ field }}
                {{ field.errors }}
            </p>
        {% endfor %}
        <p>
            {{ error_msg }}
        </p>
        <p>
            <input type="submit" value="登录" >
        </p>
    </form>
    

    页面显示效果

    EmailField 邮箱格式校验

    校验输入字符是邮箱格式,可以用 EmailField 字段

    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    
    username = forms.EmailField(required=True,
                                    label="邮箱",
                                    error_messages={
                                       'required': '用户名不能为空',
                                       'invalid': '格式不合法'
                                   })
    

    error_messages 里面invalid 是邮箱不合法的时候给出报错内容

  • 相关阅读:
    HDU 5640 King's Cake
    HDU 5615 Jam's math problem
    HDU 5610 Baby Ming and Weight lifting
    WHU1604 Play Apple 简单博弈
    HDU 1551 Cable master 二分
    CodeForces659C Tanya and Toys map
    Codeforces 960E 树dp
    gym 101485E 二分匹配
    Codeforces 961E 树状数组,思维
    Codeforces Round #473 (Div. 2) D 数学,贪心 F 线性基,模板
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/14975609.html
Copyright © 2011-2022 走看看