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})
<!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>
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>
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>
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))
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)
表单验证模块的限制,自定制。生成标签
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})
# 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)
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')
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