前端有若干個input輸入框,將使用者輸入內容,以字典傳遞給後端。
後端預先存在乙個form表單驗證的基類,封裝了乙個檢測使用者輸入是否全部通過的方法。該方法會先定義好錯誤資訊的字典,並會遍歷類的所有屬性(對應前端待驗證的輸入域),呼叫各自的驗證方法,將錯誤資訊(兩類,必要與否以及格式正確與否)存入字典,並得出最終的驗證結果。在使用時,需要定義繼承自form基類不同的form類,以對應有著不同輸入域的form表單。在拿到前端給的字典前,要先初始化自定義from類,直接執行封裝好的整體驗證方法,拿到結果後就可以拋給前端了。
#from django import
forms
#繼承自django的form類
#內部以欄位形式定義驗證域
class
myform(forms.form):
user =forms.charfield()
pwd = forms.charfield()
#defform(request):
myform
if request.method == '
post':
f =myform(request.post)
ret = f.is_valid() #
bool
data = f.cleaned_data #
errors = f.errors #
errordict,列印時因為__str__方法,會顯示位ul標籤的形式
print(errors.get('
user
', none)[0] if errors.get('
user
', none) else none) #
errorlist,以索引取出第一條錯誤資訊
return render(request, "
form.html
", )
return render(request, "
form.html
")
#project/templates/forms.html
#from django import
forms
models
defmobile_validate(value):
import
re mobile_re = re.compile("
^(13[0-9]|14[579]|15[0-3,5-9]|1 6[6]|17[0135678]|18[0-9]|19[89])\\d$")
ifnot
mobile_re.match(value):
print('
123123')
raise forms.validationerror('
手機號碼格式不對哦')
class
myform(forms.form):
def__init__(self, *args, **kwargs):
super(myform, self).
__init__(*args, **kwargs)
self.fields[
'book_type
'] =forms.charfield(
widget=forms.select(choices=models.booktype.objects.values_list('
id', '
caption'))
)user = forms.charfield(min_length=4, max_length=10, widget=forms.textinput)
pwd = forms.charfield(error_messages=)
email = forms.emailfield(error_messages=)
#book_type_choices = (
#(0, '**'), value
#(1, '科普'), innertext
#) # 元組內有元組
#從資料庫獲得資料
#注意這裡filed都是靜態字段
#類的靜態欄位只建立一次以後不會再修改,新的物件都會使用同乙份資料
#所以myform這裡的靜態欄位只會執行一次
#加入資料庫中的資料更新了,伺服器不重啟的話,這裡從資料庫取來的值是不會變的
#因此將該字段寫入類的初始化方法裡,不要忘了執行父類的初始化方法哦
#book_type_choices = models.booktype.objects.values_list('id', 'caption')
#book_type = forms.charfield(
#widget=forms.select(choices=book_type_choices)#)
comment =forms.charfield(
widget=forms.textarea(attrs=)
) #可以為生成的標籤新增屬性
mobile =forms.charfield(
validators=[mobile_validate, ],
error_messages=,
widget=forms.textinput
)
<div
class
="input-group"
>
<
div
style
="float:left;width:70px;"
>使用者名稱:
div>
}
<
span
>}
span
>
div>
<
div
class
="input-group"
>
<
div
style
="float:left;width:70px;"
>密碼:
div>
}
<
span
>}
span
>
div>
<
div
class
="input-group"
>
<
div
style
="float:left;width:70px;"
div>
}
<
span
>}
span
>
// 以下都是上面input-group標籤的重複,只是field不同而已,不再細說
碎碎念:
中間給render傳入兩個字典,一直除錯不出問題,費時頗久,下次留心。
Django中 form表單的使用
from django import forms 第一步 首先在models.py中定義乙個表單模型 class remarkform forms.form subject forms.charfield max length 100 label mail forms.emailfield labe...
django學習 Form表單
在驗證某個欄位的時候,可以傳遞乙個validators引數用來指定驗證器,對資料進行進一步的過濾。驗證器有很多,但是很多驗證器我們其實已經通過這個field或者一些引數就可以指定了。比如emailvalidator,我們可以通過emailfield來指定,比如maxvaluevalidator,我們...
Django的form表單和ajax
在web開發中,表單提交是乙個很常見的功能,在django中,使用form表單提交較為簡單,需要注意在表單中新增,如果不想這樣做,也可以在對應的view方法中新增裝飾器 csrf exempt,強制不使用csrf認證。如果是ajax提交表單,則相對複雜一些,在ajax提交時,除了提交你的表單內容資料...