Django之表单验证

from django.shortcuts import render

# Create your views here.
from django import forms
class LoginForm(forms.Form):
    user=forms.CharField(min_length=6,error_messages={"required":"用户名不能为空","min_length":"用户名长度不能小于6"})
    email = forms.EmailField(error_messages={"required":"邮箱不能为空","invalid":"邮箱格式错误"})

def login(request):
    if request.method=="GET":
        return render(request,"login.html")
    elif request.method=="POST":
        # n=request.POST.get('user')
        # e=request.POST.get('email')
        # p=request.POST.get('pwd')
        # return 0
        obj=LoginForm(request.POST)
        # status =obj.is_valid()#一个个取值在模板中进行校验
        # print(status)
        # value_dict=obj.clean()#只取到验证通过的信息
        # print(value_dict)
        # # error_obj=obj.errors
        # error_obj = obj.errors.as_json()
        # print(error_obj)
        if obj.is_valid():
            value_dict = obj.clean()
            print(value_dict)
        else:
            error_obj = obj.errors.as_json()
            print(error_obj)
        return render(request,"login.html")

  

用户提交数据的验证

1/创建模板

2/讲请求交给模板,创建一个对象

3/进行验证

4/获取正确信息

4/获取错误信息


from django.shortcuts import render

# Create your views here.
from django import forms
class LoginForm(forms.Form):
    user=forms.CharField(min_length=6,error_messages={"required":"用户名不能为空","min_length":"用户名长度不能小于6"})
    email = forms.EmailField(error_messages={"required":"邮箱不能为空","invalid":"邮箱格式错误"})

def login(request):
    if request.method=="GET":
        return render(request,"login.html")
    elif request.method=="POST":
        # n=request.POST.get('user')
        # e=request.POST.get('email')
        # p=request.POST.get('pwd')
        # return 0
        obj=LoginForm(request.POST)
        # status =obj.is_valid()#一个个取值在模板中进行校验
        # print(status)
        # value_dict=obj.clean()#只取到验证通过的信息
        # print(value_dict)
        # # error_obj=obj.errors
        # error_obj = obj.errors.as_json()
        # print(error_obj)
        if obj.is_valid():
            value_dict = obj.clean()
            print(value_dict)
        else:
            # error_obj = obj.errors
            # print(error_obj["user"][0])
            # print(error_obj["email"][0])
            print(obj.errors["user"][0])
            print(obj.errors["email"][0])
            # from django.forms.utils import ErrorDict
        return render(request,"login.html",{"oo":obj})
View Code
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>form提交数据</h1>
<form action="/app01/login.html" method="post">
    <p><input type="text" name="user" placeholder="用户名">
    <span>{{ oo.errors.user.0 }}</span>
    </p>
    <p><input type="text" name="email" placeholder="邮箱">
     <span>{{ oo.errors.email.0 }}</span>
    </p>
    <p><input type="text" name="pwd" placeholder="密码"></p>
    <p><input type="submit" value="提交"></p>
    <p><input type="submit" value="ajax提交" id="ajax_submit"></p>
</form>
<script src="/static/js/jquery-3.3.1.min.js"></script>
<script>
    $('#ajax_submit').click(function () {
        $.ajax({
            url:"/app01/login.html/",
            data:{user:"root",email:"root@126.com",pwd:"123123"},
            type:"post",
            success:function (arg) {
                console.log(arg)
            }
        })
    })
</script>
</body>
</html>
View Code

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body>
 8 <h1>form提交数据</h1>
 9 <form action="/app01/login.html" method="post">
10     <p>
11     {{ oo.user }}
12     <span>{{ oo.errors.user.0 }}</span>
13     </p>
14     <p>
15         {{ oo.email }}
16      <span>{{ oo.errors.email.0 }}</span>
17     </p>
18     <p><input type="text" name="pwd" placeholder="密码"></p>
19     <p><input type="submit" value="提交"></p>
20     <p><input type="submit" value="ajax提交" id="ajax_submit"></p>
21 </form>
22 <script src="/static/js/jquery-3.3.1.min.js"></script>
23 <script>
24     $('#ajax_submit').click(function () {
25         $.ajax({
26             url:"/app01/login.html/",
27             data:{user:"root",email:"root@126.com",pwd:"123123"},
28             type:"post",
29             success:function (arg) {
30                 console.log(arg)
31             }
32         })
33     })
34 </script>
35 </body>
36 </html>
View Code



ajax 提交表单验证

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body>
 8 <h1>form提交数据</h1>
 9 <form id="f1">
10     <p>
11         <input type="text" name="user" placeholder="username">
12 
13     </p>
14     <p>
15         <input type="text" name="email" placeholder="email-address">
16 
17     </p>
18     <p><input type="text" name="pwd" placeholder="密码"></p>
19     <p><input type="button" value="ajax提交" id="ajax_submit"></p>
20 </form>
21 <script src="/static/js/jquery-3.3.1.min.js"></script>
22 <script>
23     $('#ajax_submit').click(function () {
24         $.ajax({
25             url:"/app01/login_ajax.html",
26             //data:{user:"root",email:"root@126.com",pwd:"123123"},
27             data:$('#f1').serialize(),
28             type:"post",
29             success:function (arg) {
30                 $('.error-msg').remove();
31                 var v1=JSON.parse(arg);
32                 if(!v1.status){
33                     var error_obj=JSON.parse(v1.error);
34                     //alert(error_obj['email'][0].message);
35                     $.each(error_obj,function (k,v) {
36                          var tag=document.createElement('span');
37                         tag.className='error-msg';
38                         tag.innerHTML=v[0].message;
39                         $("input[name='"+k+"']").after(tag);
40                     })
41                 }
42             }
43         })
44     })
45 </script>
46 </body>
47 </html>
View Code
 1 import json
 2 def login_ajax(request):
 3     if request.method=="GET":
 4         return render(request,"login_ajax.html")
 5     elif request.method=="POST":
 6         ret={'status':True,'error':None,'data':None}
 7         print(request.POST)
 8         obj=LoginForm(request.POST)
 9         if obj.is_valid():
10             value_dict = obj.clean()
11             print(value_dict)
12         else:
13             print(type(obj.errors))
14             print(obj.errors.as_data())
15             res_str=obj.errors.as_json()
16             ret['status']=False
17             ret['error']=res_str
18             # ret['status']=False
19             # ret['error']=obj.errors.as_data()
20         return HttpResponse(json.dumps(ret))
View Code

obj.errors.as_data()
from django.shortcuts import render,HttpResponse

# Create your views here.
from django import forms
class LoginForm(forms.Form):
    user=forms.CharField(min_length=6,error_messages={"required":"用户名不能为空","min_length":"用户名长度不能小于6"})
    email = forms.EmailField(error_messages={"required":"邮箱不能为空","invalid":"邮箱格式错误"})

def login(request):
    if request.method=="GET":
        obj = LoginForm()
        return render(request,"login.html",{"oo":obj})
    elif request.method=="POST":
        # n=request.POST.get('user')
        # e=request.POST.get('email')
        # p=request.POST.get('pwd')
        # return 0
        obj=LoginForm(request.POST)
        # status =obj.is_valid()#一个个取值在模板中进行校验
        # print(status)
        # value_dict=obj.clean()#只取到验证通过的信息
        # print(value_dict)
        # # error_obj=obj.errors
        # error_obj = obj.errors.as_json()
        # print(error_obj)
        if obj.is_valid():
            value_dict = obj.clean()
            print(value_dict)
        else:
            # error_obj = obj.errors
            # print(error_obj["user"][0])
            # print(error_obj["email"][0])
            # print(obj.errors["user"][0])
            # print(obj.errors["email"][0])
            # from django.forms.utils import ErrorDict
            pass
        return render(request,"login.html",{"oo":obj})
import json
def login_ajax(request):
    if request.method=="GET":
        return render(request,"login_ajax.html")
    elif request.method=="POST":
        ret={'status':True,'error':None,'data':None}
        print(request.POST)
        obj=LoginForm(request.POST)
        if obj.is_valid():
            value_dict = obj.clean()
            print(value_dict)
        else:
            # print(type(obj.errors))
            # print(obj.errors.as_data())#{'user': [ValidationError(['用户名不能为空'])], 'email': [ValidationError(['邮箱不能为空'])]}
            # res_str=obj.errors.as_json()
            # ret['status']=False
            # ret['error']=res_str
            ret['status']=False
            ret['error']=obj.errors.as_data()
            # v=obj.errors.as_data()['user'][0]
            # print(type(v))#django.core.exceptions.ValidationError
            # from django.core.exceptions import ValidationError
        return HttpResponse(json.dumps(ret,cls=JsonCustomEncoder))

from django.core.exceptions import ValidationError
class JsonCustomEncoder(json.JSONEncoder):
    def default(self, field):
        if isinstance(field, ValidationError):
            return {"code":field.code,"message":field.message}
        else:
            return json.JSONEncoder.default(self, field)
View Code



表单验证模块的限制,自定制。生成标签

class IndexForm(forms.Form):
    user = forms.CharField(min_length=6, error_messages={"required": "用户名不能为空", "min_length": "用户名长度不能小于6"})
    email = forms.EmailField(error_messages={"required": "邮箱不能为空", "invalid": "邮箱格式错误"})
    # favor=forms.ChoiceField(
    #     choices=[(1,"道君"),(2,"天骄战纪"),(3,"圣墟")]
    # )
    favor = forms.MultipleChoiceField(
        choices=[(1, "道君"), (2, "天骄战纪"), (3, "圣墟")]
    )
def index(request):
    obj=IndexForm()
    return render(request,"index.html",{"obj":obj})

def edit_index(request):
    obj=IndexForm({'user':'root','email':'root@123.com','favor':[2,3]})
    return render(request,"edit_index.html",{"obj":obj})
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>{{ obj.user }}</p>
<p>{{ obj.email }}</p>
<p>{{ obj.favor }}</p>
</body>
</html>

#!/usr/bin/env python3
#-*- coding:utf-8 -*-
'''
Administrator 
2018/11/27 
'''
from django import forms
from django.forms import fields
from django.forms import widgets
class DetailForm(forms.Form):
    user=fields.CharField(widget=widgets.TextInput(attrs={'class':'c1','placeholder':'username'}))
    pwd = fields.CharField(widget=widgets.PasswordInput(attrs={'class': 'c1', 'placeholder': 'password'}))
    user3=fields.ChoiceField(choices=[(1, "上海"), (2, "广州"), (3, "北京")])
def detail(request):
    from app01 import Rform
    obj=Rform.DetailForm()
    return render(request,"detail.html",{"obj":obj})

 


#!/usr/bin/env python3
#-*- coding:utf-8 -*-
'''
Administrator 
2018/11/27 
'''
from django import forms
from django.forms import fields
from django.forms import widgets
class DetailForm(forms.Form):
    user=fields.CharField(widget=widgets.TextInput(attrs={'class':'c1','placeholder':'username'}))
    pwd = fields.CharField(widget=widgets.PasswordInput(attrs={'class': 'c1', 'placeholder': 'password'}))
    user3=fields.ChoiceField(choices=[(1, "上海"), (2, "广州"), (3, "北京")])
    user4=fields.IntegerField()
    user5 = fields.CharField(
        widget=widgets.Select(choices=[(1, "上海"), (2, "广州"), (3, "北京")])
    )
    user6 = fields.IntegerField(
        widget=widgets.Select(choices=[(1, "上海"), (2, "广州"), (3, "北京")])
    )
    user7= fields.IntegerField(
        widget=widgets.RadioSelect(choices=[(1, "上海"), (2, "广州"), (3, "北京")])
    )

  

 


#!/usr/bin/env python3
#-*- coding:utf-8 -*-
'''
Administrator 
2018/11/27 
'''
from django import forms
from django.forms import fields
from django.forms import widgets
from django.core.validators import RegexValidator
class DetailForm(forms.Form):
    user=fields.CharField(widget=widgets.TextInput(attrs={'class':'c1','placeholder':'username'}))
    pwd = fields.CharField(widget=widgets.PasswordInput(attrs={'class': 'c1', 'placeholder': 'password'}))
    user3=fields.ChoiceField(choices=[(1, "上海"), (2, "广州"), (3, "北京")])
    user4=fields.IntegerField()
    user5 = fields.CharField(
        widget=widgets.Select(choices=[(1, "上海"), (2, "广州"), (3, "北京")])
    )
    user6 = fields.IntegerField(
        widget=widgets.Select(choices=[(1, "上海"), (2, "广州"), (3, "北京")])
    )
    user7= fields.IntegerField(
        widget=widgets.RadioSelect(choices=[(1, "上海"), (2, "广州"), (3, "北京")])
    )

class FieldsForm(forms.Form):
    f1 = fields.CharField(
        max_length=6,
        required=False,
        label="用户名",
        initial="root",
        help_text="用户名最少5个字符,最大15个字符",
        error_messages={'required':"不能为空",'f1':'cdafdafdasfasdfasdfag','f2':'4564d5a4f6d23afda','max_length':'taichangle'},
        show_hidden_initial=True,
        validators=[RegexValidator(r'^[0-9]+$', '1111111111',code='f1'), RegexValidator(r'^159[0-9]+$', '2222222222222',code='f2')],
        label_suffix='>>>',
    )
    #f2=fields.RegexField(r'^159[0-9]+$')
    f3=fields.FileField()
    f4=fields.ChoiceField(
        initial=2,
        choices=[(1,'牛油到'),(2,"谋利益"),(3,"刘新明")],
    )
    f5 = fields.TypedChoiceField(
        coerce=lambda x:int(x),
        initial=2,
        choices=[(1, '牛油到'), (2, "谋利益"), (3, "刘新明")],
    )
    f6= fields.MultipleChoiceField(
        initial=[1,2],
        choices=[(1, '牛油到'), (2, "谋利益"), (3, "刘新明")],
    )
    f6a = fields.TypedMultipleChoiceField(
        coerce=lambda x:int(x),
        initial=[1, 2],
        choices=[(1, '牛油到'), (2, "谋利益"), (3, "刘新明")],
    )
    # f7=fields.ComboField(fields=[fields.CharField(max_length=20), fields.EmailField(),])
    f7=fields.SplitDateTimeField()
    f8=fields.FilePathField(path='app01',allow_folders=True,recursive=True)

#!/usr/bin/env python3
#-*- coding:utf-8 -*-
'''
Administrator 
2018/11/27 
'''
from django import forms
from django.forms import fields
from django.forms import widgets
from django.core.validators import RegexValidator
class DetailForm(forms.Form):
    user=fields.CharField(widget=widgets.TextInput(attrs={'class':'c1','placeholder':'username'}))
    pwd = fields.CharField(widget=widgets.PasswordInput(attrs={'class': 'c1', 'placeholder': 'password'}))
    user3=fields.ChoiceField(choices=[(1, "上海"), (2, "广州"), (3, "北京")])
    user4=fields.IntegerField()
    user5 = fields.CharField(
        widget=widgets.Select(choices=[(1, "上海"), (2, "广州"), (3, "北京")])
    )
    user6 = fields.IntegerField(
        widget=widgets.Select(choices=[(1, "上海"), (2, "广州"), (3, "北京")])
    )
    user7= fields.IntegerField(
        widget=widgets.RadioSelect(choices=[(1, "上海"), (2, "广州"), (3, "北京")])
    )

class FieldsForm(forms.Form):
    f1 = fields.CharField(
        max_length=6,
        required=False,
        label="用户名",
        initial="root",
        help_text="用户名最少5个字符,最大15个字符",
        error_messages={'required':"不能为空",'f1':'cdafdafdasfasdfasdfag','f2':'4564d5a4f6d23afda','max_length':'taichangle'},
        show_hidden_initial=True,
        validators=[RegexValidator(r'^[0-9]+$', '1111111111',code='f1'), RegexValidator(r'^159[0-9]+$', '2222222222222',code='f2')],
        label_suffix='>>>',
    )
    #f2=fields.RegexField(r'^159[0-9]+$')
    f3=fields.FileField()
    f4=fields.ChoiceField(
        initial=2,
        choices=[(1,'牛油到'),(2,"谋利益"),(3,"刘新明")],
    )
    f5 = fields.TypedChoiceField(
        coerce=lambda x:int(x),
        initial=2,
        choices=[(1, '牛油到'), (2, "谋利益"), (3, "刘新明")],
    )
    f6= fields.MultipleChoiceField(
        initial=[1,2],
        choices=[(1, '牛油到'), (2, "谋利益"), (3, "刘新明")],
    )
    f6a = fields.TypedMultipleChoiceField(
        coerce=lambda x:int(x),
        initial=[1, 2],
        choices=[(1, '牛油到'), (2, "谋利益"), (3, "刘新明")],
    )
    # f7=fields.ComboField(fields=[fields.CharField(max_length=20), fields.EmailField(),])
    f7=fields.SplitDateTimeField()
    f8=fields.FilePathField(path='app01',allow_folders=True,recursive=True)


class WidghtdForm(forms.Form):
    w1=fields.CharField(widget=widgets.ClearableFileInput)

from app01 import models
class DBForm(forms.Form):
    host=fields.CharField()
    host_type = fields.IntegerField(
        # widget=widgets.Select(choices=[(0,'SH'),(1,'BJ')])
        # widget=widgets.Select(choices=models.UserType.objects.all().values_list('id','caption'))
        widget=widgets.Select(choices=[])
    )

    def __init__(self,*args,**kwargs):
        super(DBForm,self).__init__(*args,**kwargs)
        self.fields['host_type'].widget.choices=models.UserType.objects.all().values_list('id','caption')
实时更新的问题
def db(request):
    from app01 import Rform
    from app01 import models
    if request.method=="GET":
        obj = Rform.DBForm()
        return render(request, "db.html", {"obj": obj})
def initial(request):
    from app01 import Rform
    from app01 import models
    if request.method == "GET":
        nid=request.GET.get('nid')
        m=models.UserInfo.objects.filter(id=nid).first()
        print(m.name,type(m.name))
        dic={'username':m.name,'user_type':m.ut_id}
        obj = Rform.InitialForm(dic)
        return render(request, "initial.html", {"obj": obj})
View Code
# Create your models here.
class UserInfo(models.Model):
    name=models.CharField(max_length=32)
    ut=models.ForeignKey("UserType",on_delete=models.CASCADE)


class UserType(models.Model):
    caption=models.CharField(max_length=32)
View Code
from app01 import models
class DBForm(forms.Form):
    host=fields.CharField()
    host_type = fields.IntegerField(
        # widget=widgets.Select(choices=[(0,'SH'),(1,'BJ')])
        # widget=widgets.Select(choices=models.UserType.objects.all().values_list('id','caption'))
        widget=widgets.Select(choices=[])
    )

    def __init__(self,*args,**kwargs):
        super(DBForm,self).__init__(*args,**kwargs)
        self.fields['host_type'].widget.choices=models.UserType.objects.all().values_list('id','caption')

class InitialForm(forms.Form):
    username=fields.CharField()
    user_type=fields.IntegerField(
        widget=widgets.Select(choices=[])
    )
    def __init__(self,*args,**kwargs):
        super(InitialForm,self).__init__(*args,**kwargs)
        self.fields['user_type'].widget.choices=models.UserType.objects.all().values_list('id','caption')
View Code

F和Q


filter(id__gt=1,name='root')
filter(**{"id__gt":1,...})

用and or 等操作
filter(Q(id__gt=1)|Q(name="root"))
(邮箱&密码)|(用户名&密码)

  

https://www.cnblogs.com/wupeiqi/articles/6144178.html

]

https://www.cnblogs.com/wupeiqi/articles/5938916.html

原文地址:https://www.cnblogs.com/Mengchangxin/p/10019741.html