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 }},效果如下

原文地址:https://www.cnblogs.com/yoyoketang/p/14972665.html