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': '邮箱格式错误'})

      

    生成的标签:

  • 相关阅读:
    thinkphp tp5 常用 functions
    nginx配置虚拟机 vhost 端口号 域名 区分虚拟机
    thinkphp tp5 模板 引擎 字符串 截取 函数 省略 显示
    C++运算符重载
    c++纯虚函数
    c++面向对象模型---c++如何管理类,对象以及它们之间的联系
    c++多态
    c++友元函数
    c语言的函数指针
    c++两种字符串赋值方式 并介绍 C语言下遍历目录文件的方式
  • 原文地址:https://www.cnblogs.com/kuku0223/p/8119362.html
Copyright © 2011-2022 走看看