做者:刘耀css
瞎copy伸手党 我在诅咒你。html
一、生成html标签前端
二、用来作用户提交的验证python
三、能够和models一块儿使用(modelform)django
工程和app建立步骤省略后端
1.在app下面建立forms.py (用于放置全部form结构)app
内容以下: #!/usr/bin/env python3 #coding:utf8 from django import forms #导入django的forms class UserInfo(forms.Form): #建立一个类 继承form方法 user = forms.CharField() password = forms.CharField() email = forms.EmailField(required=False) #required是否能够为空,若是为False说明能够为空 mobile = forms.CharField()
2.在views里建立函数函数
from django.shortcuts import render,HttpResponse # Create your views here. from crm import forms #导入form def index(request): obj = forms.UserInfo() #建立对象 return render(request,'index.html',{'obj':obj}) #将对象传入
3.建立访问urlpost
url(r'^$',views.index),
4.建立index页面测试
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="" method="post">{% csrf_token %} <h1>用户名:{{ obj.user }}</h1> <h1>密码:{{ obj.password }}</h1> <h1>邮箱:{{ obj.email }}</h1> <h1>手机号:{{ obj.mobile }}</h1> <input type="submit" value="submit"/> </form> </body> </html>
5.访问测试
本身测试吧。哈哈哈哈哈哈哈哈哈哈哈。
以上只是简单的生成页面而已,下面让你瞅瞅如何接收验证form提交给后台的内容
只要修改views里的index函数就能够
from django.shortcuts import render,HttpResponse # Create your views here. from crm import forms def index(request): obj = forms.UserInfo() if request.method == 'POST': #将post过来的数据交给userinfo这个类处理以后把结果封装到user_obj user_obj = forms.UserInfo(request.POST) print(user_obj.is_valid()) #[结果是:True or False] #---------------------------- #is_vaild返回是True或者flase #经过is_valid()来判断用户输入是否合法! # 若是不合法就把返回信息发送过去,若是合法获取数据操做便可! #捕获错误信息并返回(来自罗天帅) if user_obj.is_valid(): #获取前端提交的数据 print(user_obj.clean()) #结果[{'email': 'LIUYAO@qq.com', 'mobile': '110', 'password': 'WOSHIDASAHBI', 'user': 'LIUYAO'}] else: #若是返回false那么确定是错误提交 user_error = user_obj.errors #打印错误信息 print (user_error) #错误信息应该是一个html页面 #<ul class="errorlist"><li>mobile<ul class="errorlist"> # <li>This field is required.</li></ul></li>< # li>password<ul class="errorlist"><li>This field is required.</li> # </ul></li><li>user<ul class="errorlist"><li>This field is required.</li> # </ul></li></ul> #把错误信息返回给前端页面 return render(request,'index.html',{'obj':obj,'user_error':user_error}) return render(request,'index.html',{'obj':obj})
几个方法以下
#建立对象 obj = forms.UserInfo() #获取post数据 user_obj = forms.UserInfo(request.POST) #验证数据 print(user_obj.is_valid()) #打印前端传过来的具体数据值 print(user_obj.clean()) #获取错误信息 user_error = user_obj.errors
1.自定义报错内容:
使用error_messages={'required':'自定义内容'}
修改forms文件以下:
from django import forms class UserInfo(forms.Form): user = forms.CharField(error_messages={'required':'用户名不能为空'}) password = forms.CharField(error_messages={'required':'密码不能为空'}) email = forms.EmailField(required=False) #required是否能够为空,若是为False说明能够为空 mobile = forms.CharField(error_messages={'required':'手机号不能为空'})
测试访问
2.给表单添加css属性和默认显示
#!/usr/bin/env python3 #coding:utf8 from django import forms class UserInfo(forms.Form): user = forms.CharField(error_messages={'required':'用户名不能为空'}) password = forms.CharField(error_messages={'required':'密码不能为空'}) email = forms.EmailField(required=False) #required是否能够为空,若是为False说明能够为空 mobile = forms.CharField(error_messages={'required':'手机号不能为空'}, widget=forms.TextInput(attrs={'class':'form-control','placeholder':u'手机号码'}) ) 方法: widget=forms.TextInput(attrs={'class':'form-control','placeholder':u'手机号码'}) index页面加上一个style <style> .form-control{ background-color:crimson; } </style>
测试访问:
当前端js被禁用的时候,那么提交的时候,就不能判断输入的合法性等等
因此要在后端也加上一个验证,若是不经过刷新显示。
一个简单的用户注册案例:
修改forms.py以下
#!/usr/bin/env python3 #coding:utf8 import re from django import forms from django.core.exceptions import ValidationError #定义一个用于验证手机号是否合法的函数 def PhoneValidate(value): #正则匹配 phone_re = re.compile(r'^(13[0-9]|15[012356789]|17[0678]|18[0-9]|14[57])[0-9]{8}$') if not phone_re.match(value): raise ValidationError('手机号码格式错误') class UserInfo(forms.Form): user = forms.CharField(error_messages={'required':'用户名不能为空'}) password = forms.CharField(error_messages={'required':'密码不能为空'}) email = forms.EmailField(required=False) #required是否能够为空,若是为False说明能够为空 #使用validators能够调用本身自定义的方法 phone = forms.CharField(validators=[PhoneValidate,], error_messages={'required':'手机号不能为空'}, widget=forms.TextInput(attrs={'class':'form-control','placeholder':u'手机号码'}), )
index页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .form-control{ background-color:crimson; } </style> </head> <body> <form action="" method="post">{% csrf_token %} <h1>用户名:{{ obj.user }}<h5>{{ user_error.user }}</h5></h1> <h1>密码:{{ obj.password }}<h5>{{ user_error.password }}</h5></h1> <h1>邮箱:{{ obj.email }}<h5>{{ user_error.email }}</h5></h1> <h1>手机号:{{ obj.phone }}<h5>{{ user_error.phone }}</h5></h1> <input type="submit" value="注册"/> </form> </body> </html>
访问以下:
4、生成select标签
#!/usr/bin/env python3 #coding:utf8 import re from django import forms from django.core.exceptions import ValidationError #定义一个用于验证手机号是否合法的函数 def PhoneValidate(value): #正则匹配 phone_re = re.compile(r'^(13[0-9]|15[012356789]|17[0678]|18[0-9]|14[57])[0-9]{8}$') if not phone_re.match(value): raise ValidationError('手机号码格式错误') class UserInfo(forms.Form): vip_type = ( (0, u'普通用户'), (1, u'高级用户'),) vip = forms.CharField(widget=forms.widgets.Select(choices=vip_type,attrs={'class':'form-control'}), ) user = forms.CharField(error_messages={'required':'用户名不能为空'}) password = forms.CharField(error_messages={'required':'密码不能为空'}) email = forms.EmailField(required=False) #required是否能够为空,若是为False说明能够为空 phone = forms.CharField(validators=[PhoneValidate,], error_messages={'required':'手机号不能为空'}, widget=forms.TextInput(attrs={'class':'form-control','placeholder':u'手机号码'}), )
index页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .form-control{ background-color:crimson; } </style> </head> <body> <form action="" method="post">{% csrf_token %} <h1>会员级别:{{ obj.vip }}<h5>{{ user_error.vip }}</h5></h1> <h1>用户名:{{ obj.user }}<h5>{{ user_error.user }}</h5></h1> <h1>密码:{{ obj.password }}<h5>{{ user_error.password }}</h5></h1> <h1>邮箱:{{ obj.email }}<h5>{{ user_error.email }}</h5></h1> <h1>手机号:{{ obj.phone }}<h5>{{ user_error.phone }}</h5></h1> <input type="submit" value="注册"/> </form> </body> </html>
测试访问:
就先这么写吧
参考:
http://www.cnblogs.com/luotianshuai
http://www.cnblogs.com/alex3714/
http://www.cnblogs.com/wupeiqi/
官方文档: https://docs.djangoproject.com/en/1.9/topics/forms/