Django-website 程序案例系列-16 modle.form(表单验证)

Posted 划得戳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django-website 程序案例系列-16 modle.form(表单验证)相关的知识,希望对你有一定的参考价值。

案例程序:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/fm/" method="POST">  #3个输入框分别是user/pwd/email
    {% csrf_token %}
    <input type="text" name="user" />
    <input type="text" name="pwd" />
    <input type="text" name="email" />
    <input type="submit" value="提交" />
</form>
</body>
</html>

views函数:

from django import forms   # 首先需导入forms包

class FM(forms.Form):     #建立一个验证类
    user = forms.CharField(error_messages={\'required\': \'用户名不能为空\'})     #自定制的中文错误返回
    pwd = forms.CharField(
        max_length=\'12\',
        min_length=\'8\',
        error_messages={\'required\': \'密码不能为空\', \'max_length\': \'密码最大长度不能大于12\', \'min_length\': \'密码最小长度不能小于8\'}
    )
    email = forms.EmailField(error_messages={\'required\': \'邮箱不能为空\', \'invalid\': \'邮箱格式错误\'})

def fm(request):
    if request.method == "GET":
        return render(request, \'fm.html\')
    elif request.method == "POST":
        # 获取用户的所有数据
        # 每条数据请求的验证
        # 成功:获取所有的正确信息
        # 失败:显示错误信息
        obj = FM(request.POST) #生成一个表单验证类
        r1 = obj.is_valid()    #验证输出的结果 成功为true  错误为false
        print(r1)
        if r1:
            print(obj.cleaned_data)  #如果成功返回验证好的数据并打印
        else:
            print(obj.errors.as_json)  #如果失败返回错误信息打印
        return redirect(\'/fm/\')

 

显示的信息:

达到了自定制返回的错误信息为中文的目的

 

 向前端送出验证错误信息:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/fm/" method="POST">
    <p><input type="text" name="user" />  {{ obj.errors.user.0 }} </p>  #前端显示验证错误信息
    <p><input type="text" name="pwd" /> {{ obj.errors.pwd.0 }} </p>
    <p><input type="text" name="email" /> {{ obj.errors.email.0 }} </p>
    <input type="submit" value="提交" />

</form>
</body>
</html>
def fm(request):
    if request.method == "GET":
        obj = FM()
        return render(request, \'fm.html\', {\'obj\': obj}) # 传送一个验证数据对象obj
    elif request.method == "POST":
        # 获取用户的所有数据
        # 每条数据请求的验证
        # 成功:获取所有的正确信息
        # 失败:显示错误信息
        obj = FM(request.POST)
        r1 = obj.is_valid()
        print(r1)
        if r1:
            print(obj.cleaned_data)
        else:
            print(obj.errors)
            return render(request, \'fm.html\', {\'obj\': obj})
    return render(request, \'fm.html\')

 

完整的注册页面的简单表单验证加注册:

def fm(request):
    if request.method == "GET":
        obj = FM()
        return render(request, \'fm.html\', {\'obj\': obj})
    elif request.method == "POST":
        obj = FM(request.POST)
        r1 = obj.is_valid()
        if r1:
            models.UserInfo.objects.create(**obj.cleaned_data) #直接一条语句数据注册成功
        else:
            return render(request, \'fm.html\', {\'obj\': obj})
    return render(request, \'fm.html\')

  

使用forms类生成字段和html标签:

from django.forms import widgets  # widgets是生成html标签的插件
from django.forms import fields  # 在定义forms类时建议最好使用fields来表示字段
class FM(forms.Form):
    user = fields.CharField(error_messages={\'required\': \'用户名不能为空\'},    # 自定义错误
                            widgets=widgets.Textarea(attrs={\'class\': \'c1\'}),#调用插件widgets 然后生成Textarea标签(多行文本输入框) 然后添加属性attrs(class=c1)
                            )
    pwd = fields.CharField(
        max_length=\'12\',
        min_length=\'8\',
        error_messages={\'required\': \'密码不能为空\', \'max_length\': \'密码最大长度不能大于12\', \'min_length\': \'密码最小长度不能小于8\'},
        widgets=widgets.PasswordInput(attrs={\'class\': \'c2\'}), #调用插件widgets 然后生成PasswordInout标签(多行文本输入框) 然后添加属性attrs(class=c2)
) email = fields.EmailField(error_messages={\'required\': \'邮箱不能为空\', \'invalid\': \'邮箱格式错误\'})

  

生成的标签:

 

以上是关于Django-website 程序案例系列-16 modle.form(表单验证)的主要内容,如果未能解决你的问题,请参考以下文章

Django-website 程序案例系列-1 CSRF

Django-website 程序案例系列-8 分页

Django-website 程序案例系列-6 html模板文件详解

Django-website 程序案例系列-4 ORM数据库操作

Django-website 程序案例系列-15 singnal分析

Django-website 程序案例系列-5 模态对话框实现提交数据