Django中Form验证

Django的Form主要具有一下几大功能:

  • 生成HTML标签
  • 验证用户数据(显示错误信息)
  • HTML Form提交保留上次提交数据
  • 初始化页面显示内容

一,Form验证

第一种操作:主要是这三个函数

is_valid()

cleaned_data

errors

from xiaoqing import  models

def form(request):

    if request.method == "GET":
        return render(request,‘form.html‘)
    elif request.method == "POST":
        obj = FM(request.POST)
        r1 = obj.is_valid()     #is_valid() 让这个函数去验证  返回False 或者 True
        print(r1)
        if r1:
            print(r1)
            print(obj.cleaned_data)  #cleaned_data表示返回的正确的信息
            # models.Host.objects.create(**obj.cleaned_data)
        else:
            print(obj.errors.as_json())     #errors表示错误信息

            return render(request,‘form.html‘,{‘obj‘:obj,})
        return redirect(‘/xiaoqing/host‘)

    <form action="/xiaoqing/form/" method="post">
        {% csrf_token %}
{#        {% for row in error_dict.keys %}#}
        <p><input type="text" placeholder="请输入用户名" name="user"/><span style="color: red">{{ obj.errors.user.0 }}</span></p>
        <p><input type="password" placeholder="请输入密码" name="pwd"/><span style="color: red">{{ obj.errors.pwd.0 }}</span></p>
        <p><input type="text" placeholder="请输入邮箱" name="email"/><span style="color: red">{{ obj.errors.email.0 }}</span></p>
        <input type="submit" value="提交"/>
{#        {% endfor %}#}
    </form>

form.html

第二种操作:如果验证错误,用户信息不会消失

def form(request):

    if request.method == "GET":
        obj = FM()   #第一次用GET请求时,需要返回客户端一个对象

        return render(request,‘form.html‘,{‘obj‘:obj})  

    elif request.method == "POST":
        obj = FM(request.POST)
        r1 = obj.is_valid()     #is_valid() 让这个函数去验证  返回False 或者 True
        print(r1)
        if r1:
            print(r1)
            print(obj.cleaned_data)  #cleaned_data表示返回的正确的信息
            # models.Host.objects.create(**obj.cleaned_data)
        else:
            print(obj.errors.as_json())     #errors表示错误信息

            return render(request,‘form.html‘,{‘obj‘:obj,})
        return redirect(‘/xiaoqing/host‘)

views.py

        <form action="/xiaoqing/form/" method="post">
        {% csrf_token %}
{#        {% for row in error_dict.keys %}#}
        <p>{{ obj.user }}<span style="color: red">{{ obj.errors.user.0 }}</span></p>
        <p>{{ obj.pwd }}<span style="color: red">{{ obj.errors.pwd.0 }}</span></p>
        <p>{{ obj.email }}<span style="color: red">{{ obj.errors.email.0 }}</span></p>
        <input type="submit" value="提交"/>
{#        {% endfor %}#}
        </form>

form.html

二,Form 自定义样式

from django import forms
from django.forms import widgets  # 需要import 插件widgets
from django.forms import fields   #用fields 做字段验证

class FM(forms.Form):
    #字段本身只做验证 它不生成input标签
    user = fields.CharField(error_messages={‘required‘:‘用户名不能为空‘},
                           widget=widgets.Textarea(attrs={‘class‘:‘c1‘}))  #用attrs 自定义样式
    pwd = fields.CharField(max_length=12,
                          min_length=6,
                          error_messages={‘required‘:‘密码不能为空‘,‘min_length‘:‘密码长度不能小于6‘,‘max_length‘:‘密码长度不能大于12‘},
                          widget=widgets.PasswordInput)
    email = fields.EmailField(error_messages={‘required‘:‘邮箱不能为空‘,‘invalid‘:‘邮箱格式错误‘})

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c1 {
            background-color: indianred;

        }

    </style>

</head>
<body>

<div>

{#    <form action="/xiaoqing/form/" method="post">#}
{#        {% csrf_token %}#}
{#        {% for row in error_dict.keys %}#}
{#        <p><input type="text" placeholder="请输入用户名" name="user"/><span style="color: red">{{ obj.errors.user.0 }}</span></p>#}
{#        <p><input type="password" placeholder="请输入密码" name="pwd"/><span style="color: red">{{ obj.errors.pwd.0 }}</span></p>#}
{#        <p><input type="text" placeholder="请输入邮箱" name="email"/><span style="color: red">{{ obj.errors.email.0 }}</span></p>#}
{#        <input type="submit" value="提交"/>#}
{#        {% endfor %}#}
{#    </form>#}
{##}

        <form action="/xiaoqing/form/" method="post">
        {% csrf_token %}
{#        {% for row in error_dict.keys %}#}
        <p>{{ obj.user }}<span style="color: red">{{ obj.errors.user.0 }}</span></p>
        <p>{{ obj.pwd }}<span style="color: red">{{ obj.errors.pwd.0 }}</span></p>
        <p>{{ obj.email }}<span style="color: red">{{ obj.errors.email.0 }}</span></p>
        <input type="submit" value="提交"/>
{#        {% endfor %}#}
        </form>

</div>

</body>
</html>

form.html

原文地址:https://www.cnblogs.com/sunhao96/p/9003554.html

时间: 2024-07-28 22:41:55

Django中Form验证的相关文章

Django之Form验证(***)

Django之Form验证 ------- END ------- 原文地址:https://www.cnblogs.com/george92/p/11441796.html

Django中Form表单之字段详解

Django中的Form表单 1.背景 平时我们在书写form表单时,经常都是手动的去写一些input标签,让用户输入一些功能,进行一些校验的判断,等等.Django中的form表单就能够帮我们去实现这些功能,比较便捷. 2.Django form表单的功能 1.生成页面可执行的HTML标签 2.对应户的数据进行校验 3.保留上次输入的内容 3.先用普通方式手写一个注册功能 1.views.py文件中 # 注册 def register(request): error_msg = ""

django 使用form验证用户名和密码

form验证可以减少查询数据库,所以代码先预先验证,有问题可以返回给前端显示 1.在users文件夹下新建forms.py文件,用来验证用户名和密码是否为空,密码长度是否大于6 # -*- coding: utf-8 -*- # 作者:神秘藏宝室 # 日期:2018/12/30 21:56 from django import forms class LoginForm(forms.Form): username = forms.CharField(required=True) password

Django中form组件的所有内置字段

1 Field 2 required=True, 是否允许为空 3 widget=None, HTML插件 4 label=None, 用于生成Label标签或显示内容 5 initial=None, 初始值 6 help_text='', 帮助信息(在标签旁边显示) 7 error_messages=None, 错误信息 {'required': '不能为空', 'invalid': '格式错误'} 8 validators=[], 自定义验证规则 9 localize=False, 是否支持

Django 中 form 介绍

目录 Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入的长度和格式等正不正确.如果用户输入的内容有错误就需要在页面上相应的位置显示对应的错误信息.. Django form组件就实现了上面所述的功能. 总结一下,其实form组件的主要功能如下: 生成页面可用的HTML标签 对用户提交的数据进行校验 保留上次输入内容 普通方式手写注册功能

Django中Form组件的使用

Form介绍 HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入的长度和格式等正不正确.如果用户输入的内容有错误就需要在页面上相应的位置显示对应的错误信息.. Django form组件就实现了上面所述的功能. 总结一下,其实form组件的主要功能如下: 生成页面可用的HTML标签 对用户提交的数据进行校验 保留上次输入内容 普通方式手写注册功能 views.p

Django中Form组件拾遗(比较坑爹的地方+易忽略的点)

[001]Form组件之自动渲染一个ID选择器 在前面的章节中,我们使用了Django自带的Form组件帮我们完成对表单数据的校验,借助于Form组件,它帮我们自动渲染出input输入框,之前没怎么注意这块,最近才发现 它帮我们渲染出的input输入框自带了id选择器,来看如下的截图就明白了,这个地方坑了很久: <input class="form-control" id="id_email" name="email" placeholde

Django中Form的Textarea字段

开始以为是这个样子: [python] view plain copy class BlogForm(forms.Form): title    = forms.CharField(required = True) content  = forms.Textarea() 查看文档发现是: [python] view plain copy from django import forms class BlogForm(forms.Form): title    = forms.CharField(

django中form表单post无法提交

报错403:Forbidden (CSRF token missing or incorrect.) 解决方法 方法一: 把settings.py文件中含有csrf那一行注释掉 方法二: 1.导入csrf_exempt包 1 from django.views.decorators.csrf import csrf_exempt 2.增加装饰器@csrf_exempt @csrf_exempt #增加装饰器,作用是跳过 csrf 中间件的保护 原文地址:https://www.cnblogs.c