• python测试开发django-102.验证时form表单error_messages


    前言

    form表单验证前端输入内容是否合法时,可以定义error_messages参数,用于前端页面展示错误信息

    error_messages参数

    LoginForm 表单添加 error_messages 参数

    • 'required': 必填字段,
    • 'min_length': 字符串最小长度,
    • 'max_length': 字符串最大长度,
    • 'invalid': 参数不合法
    from django.shortcuts import render
    from django import forms
    # Create your views here.
    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    
    
    class LoginForm(forms.Form):
        """登录Form表单"""
        username = forms.CharField(max_length=20,
                                   min_length=3,
                                   required=True,
                                   label="用户名",
                                   error_messages={
                                       'required': '用户名不能为空',
                                       'min_length': '用户名不能少于3位字符',
                                       'max_length': '用户名不能大于20位字符',
                                   })
        password = forms.CharField(max_length=16,
                                   min_length=6,
                                   required=True,
                                   label="密码",
                                   widget=forms.PasswordInput,
                                   error_messages={
                                       'required': '密码不能为空',
                                       'min_length': '密码不能少于6位字符',
                                       'max_length': '密码不能大于16位字符',
                                   })
    

    在视图中获取错误信息

    在视图函数中先form_obj.is_valid() 方法校验传入的参数是否合法,不合法的时候可以通过form_obj.errors获取报错的内容

    from django.shortcuts import render
    from django.http import HttpResponseRedirect
    from django import forms
    from django.contrib.auth import authenticate, login, logout
    # Create your views here.
    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    
    def login_form(request):
        """登录认证"""
        if request.method == "GET":
            form_obj = LoginForm()
            error_msg = ""
            return render(request, "login_form.html", locals())
        if request.method == "POST":
            form_obj = LoginForm(request.POST)
            if form_obj.is_valid():
                username = form_obj.cleaned_data.get("username")
                password = form_obj.cleaned_data.get("password")
                # 登录认证  校验账号和密码
                user = authenticate(username=username,
                                    password=password)
                if user:
                    # 登录成功 重定向到登录成功后的页面
                    if user.is_active:
                        # 登录到网站
                        login(request, user=user)
                        return HttpResponseRedirect("/personal")
                    else:
                        error_msg = "账号被冻结"
                        return render(request, "login_form.html", locals())
                else:
                    error_msg = "账号或密码错误"
                    return render(request, "login_form.html", locals())
            else:
                # 数据不合法,返回具体报错
                print(form_obj.errors)
                print(form_obj.errors.as_json())
                return render(request, "login_form.html", locals())
    

    form_obj.is_valid() 方法校验传入的参数是否合法,如果密码参数不合法,会打印form_obj.errors,是一段html代码

    <ul class="errorlist"><li>password<ul class="errorlist"><li>密码不能少于6位字符</li></ul></li></ul>
    

    form_obj.errors.as_json() 返回的是json内容

    {"password": [{"message": "u5bc6u7801u4e0du80fdu5c11u4e8e6u4f4du5b57u7b26", "code": "min_length"}]}
    

    模板中获取错误提示

    可以在循环的时候通过 field.errors 获取对应字段的报错内容

    <form action="" method="POST" id="login-form">
        {% csrf_token %}
        {% for field in form_obj %}
            <p>
                {{ field.label }}
                {{ field }}
                {{ field.errors }}
            </p>
        {% endfor %}
        <p>
            <input type="submit" value="登录" >
        </p>
    </form>
    

    报错内容在前端展示

    <ul class="errorlist"><li>密码不能少于6位字符</li></ul>
    

    也可以通过form_obj.errors获取对应字段的报错内容

    <form action="" method="POST" id="login-form">
        {% csrf_token %}
        <p>
            {{ form_obj.username.label_tag }}
            {{ form_obj.username }}
            {{ form_obj.errors.username }}
        </p>
        <p>
            {{ form_obj.password.label_tag }}
            {{ form_obj.password }}
            {{ form_obj.errors.password }}
        </p>
        <p>
            {{ error_msg }}
        </p>
        <p>
            <input type="submit" value="登录" >
        </p>
    </form>
    

    {{ form_obj.errors.password }} 获取到的报错内容跟上面一样,在页面生生成ul li的html代码

    <ul class="errorlist"><li>密码不能少于6位字符</li></ul>
    

    如果取出具体的报错文本,可以加上.0, 如{{ form_obj.errors.password.0 }},效果如下

  • 相关阅读:
    JS之函数声明与表达式
    任重道远!
    Java_Notes01
    Android_Application Fundamentals
    Android_Activity
    Android
    Linux下的实模式和保护模式
    spring注解原理
    开启aix SFTP日志 是否和链接SFTP有关呢
    Apache版本兼容性问题
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/14972665.html
Copyright © 2020-2023  润新知