Django中的Form表單驗證

2022-02-24 09:36:17 字數 3467 閱讀 3736

前端有若干個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提交時,除了提交你的表單內容資料...