Django Form表單

Django  Form 表單


在實際的生產環境中好比登陸和驗證的時候,咱們通常都使用Jquery+ajax來判斷用戶的輸入是否爲空,假如JS被禁用的話,我們這個認證屏障是否是就消失了呢?(雖然通常不會禁用掉可是仍是存在風險)html

因此咱們通常作兩種認證一種是前端作一遍認證,在後端作一遍認證。前端

首先我們看一下下面的案例:ajax


from django.shortcuts import render

# Create your views here.


def user_list(request):
host = request.POST.get('host')
port = request.POST.get('port')
mail = request.POST.get('mail')
mobile = request.POST.get('mobile')
#這裏有個問題,若是,這個from表單有20個input,你在這裏是否是的取20次?

驗證:
#輸入不能爲空,而且有的能夠爲空有的不能夠爲空
#若是 email = 11123123 這樣合法嗎?
#若是 mobile = 11123123 這樣合法嗎?
#若是 ip = 11123123 這樣合法嗎?

'''
你在這裏是否是須要作一大堆的輸入驗證啊?而且有不少這種頁面會存在這種狀況,若是每一個函數都這樣作估計就累死了
'''
return render(request,'user_list.html')


在樣能解決這個問題呢?經過Django的form來實現,其餘語言也有叫作(模型綁定)django



案例分析:

>> Django的form的做用:

一、生成html標籤後端

二、用來作用戶提交的驗證函數


settings.py 

 views.py post


from django import forms

class UserInfo(forms.Form):
email = forms.EmailField(required=False) #required是否能夠爲空,若是爲False說明能夠爲空
host = forms.CharField() #若是required不寫默認爲Ture
port = forms.CharField()
mobile
= forms.CharField()

def user_list(request):
obj = UserInfo() #建立了這個對象
return render(request,'user_list.html',{'obj':obj}) #而後把對象傳給html。

 

user_list.html  調用。ui


<form action="/user_list/" method="post">
<p>主機:{{ obj.host }}</p>
<p>端口:{{ obj.port }}</p>
<p>郵箱:{{ obj.email }}</p>
<p>手機:{{ obj.mobile }}</p>
<input type="submit" value="submit"/>
</form>


把咱們的對象穿進去,html在引用的時候直接obj.host就能夠自動生成html標籤,而後看下html顯示:spa



初步效果展現:3d


NEXT ---------------------------------------------》

二、簡單的form表單驗證用戶輸入的內容。


from django import forms

class UserInfo(forms.Form):
email = forms.EmailField(required=True) #required是否能夠爲空,若是爲False說明能夠爲空
host = forms.CharField() #若是required不寫默認爲Ture
port = forms.CharField()
mobile
= forms.CharField()

def user_list(request):
obj = UserInfo() #建立了這個對象
if request.method == 'POST':
#獲取用戶輸入一句話就搞定。
user_input_obj = UserInfo(request.POST)
'''
我們把post過來的數據當參數傳給UserInfo我們定義的這個類,UserInfo會自動會去你提交的數據
email/host/port/mobile 自動的封裝到user_input_obj,封裝到這個對象裏咱們就能夠判斷輸入是否合法
'''
print user_input_obj.is_valid()

return render(request,'user_list.html',{'obj':obj}) #而後把對象傳給html


當咱們輸入不合法的時候,(在建立類設置的需求)爲空、或者不是email格式的時候!





這樣在後端咱們是否是就有一套驗證的機制?就能夠經過is_valid()來判斷用戶輸入是否合法!若是不合法就把返回信息發送過去,若是合法獲取數據操做便可!

捕獲錯誤信息並返回

views.py 


from django import forms

class UserInfo(forms.Form):
email = forms.EmailField(required=True) #required是否能夠爲空,若是爲False說明能夠爲空
host = forms.CharField() #若是required不寫默認爲Ture
port = forms.CharField()
mobile
= forms.CharField()

def user_list(request):
obj = UserInfo() #建立了這個對象
if request.method == 'POST':
#獲取用戶輸入一句話就搞定
user_input_obj = UserInfo(request.POST)
'''
我們把post過來的數據當參數傳給UserInfo我們定義的這個類,UserInfo會自動會去你提交的數據
email/host/port/mobile 自動的封裝到user_input_obj裏,封裝到這個對象裏咱們就能夠判斷輸入是否合法

'''

if user_input_obj.is_valid(): #判斷用戶輸入是否合法
data = user_input_obj.clean() #獲取用戶輸入
print data
else:
#若是發生錯誤,捕捉錯誤。
error_msg = user_input_obj.errors
print error_msg #打印一下而後看下他的類型
'''
<ul class="errorlist">
<li>mobile<ul class="errorlist"><li>This field is required.
</li></ul></li>
<li>host<ul class="errorlist"><li>This field is required.</li></ul></li>
<li>port<ul class="errorlist"><li>This field is required.</li></ul></li>
</ul>
'''
#而後把錯誤信息返回
return render(request,'user_list.html',{'obj':obj,'errors':error_msg,}) #而後把對象傳給html,在把錯誤信息傳遞過去
return render(request,'user_list.html',{'obj':obj,}) #而後把對象傳給html




html標籤,使用error輸出


<form action="/user_list/" method="post">
<p>主機:{{ obj.host }}<span>{{ errors.host }}</span></p>
<p>端口:{{ obj.port }}<span>{{ errors.port }}</span></p>
<p>郵箱:{{ obj.email }}<span>{{ errors.email }}</span></p>
<p>手機:{{ obj.mobile }}<span>{{ errors.mobile }}</span></p>
<input type="submit" value="submit"/>
</form>


下面點擊看下效果:















相關文章
相關標籤/搜索