做者:劉耀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/