zoukankan      html  css  js  c++  java
  • 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': '邮箱格式错误'})

      

    生成的标签:

  • 相关阅读:
    12.Django与ajax
    11.Django的分页器paginator
    10.中间键Middleware
    09.用户认证auth模块
    08.form组件
    07.会话跟踪技术cookie与session
    06.orm模型层
    05.Django模板层
    04.Django视图函数
    03.DjangoURL路由
  • 原文地址:https://www.cnblogs.com/kuku0223/p/8119362.html
Copyright © 2011-2022 走看看