Django中表單驗證常用的Field

2021-09-26 18:32:19 字數 3594 閱讀 4869

1、charfield:用來接收文字

引數:max_length:指定最大長度;min_length:指定最小長度;required:指定是否是必填項,預設為true;error_messages:驗證條件不滿足時給出的錯誤提示資訊。

2、emailfield:用來接收郵件,會自動驗證郵件是否合法。

錯誤資訊的key:required、invalid:。

3、floatfield:用來接收浮點型別,驗證通過後會自動將值轉換為浮點型別

引數:max_value:最大的值;min_value:最小的值。

錯誤資訊的key:required、invalid、max_value、min_value。

4、integerfield:用來接收整型,通過驗證後會自動轉換為整型。

引數:max_value:最大的值;min_value:最小的值。

錯誤資訊的key:required、invalid、max_value、min_value。

5、urlfield:用來接收url格式的字串。

錯誤資訊的key:required、invalid。

在驗證某個欄位的時候,可以傳遞乙個validators引數來指定驗證器,進一步對資料進行過濾。驗證器有很多,但是很多驗證器通過field或者一些引數就可以指定了。比如emailvalidator,我們可以通過emailfield來指定。以下是一些常用的驗證器:

maxvaluevalidator:驗證最大值;minvaluevalidator:驗證最小值;minlengthvalidator:驗證最小長度;maxlengthvalidator:驗證最大長度;emailvalidator:驗證郵箱格式;urlvalidator:驗證是否是url格式;regexvalidator:通過正規表示式進行驗證。

例如用emailvalidator進行郵箱驗證:

from django.core import validators

from django import forms

class myform(forms.form):

email = forms.charfield(validators=[validators.emailvalidator(message='請輸入正確格式的郵箱')])

正規表示式驗證器:

from django.core import validators

from django import forms

class myform(forms.form):

telephone = forms.charfield(validators=[validators.regexvalidator("1[345678]\d",message='請輸入正確的手機號碼')])

有時,對於乙個字段,需要一些複雜的邏輯驗證,那麼可以通過對某個字段進行自定義的驗證。比如註冊的表單驗證中,需要驗證手機號碼是否已經被註冊過,那麼這時候需要檢索資料庫後判斷才知道。對某個字段進行自定義的驗證方式是,定義乙個方法,這個方法名字的規則是:clean_fieldname。如果驗證失敗,那麼就丟擲乙個驗證錯誤,比如要驗證使用者表中是否存在正在註冊的手機號:

from django.core import validators

from django import forms

class myform(forms.form):

telephone = forms.charfield(validators=[validators.regexvalidator("1[345678]\d",message='請輸入正確的手機號碼')])

​ def clean_telephone(self):

telephone = self.cleaned_data.get('telephone')

exists = user.objects.filter(telephone=telephone).exists()

if exists:

raise forms.validationerror('手機號碼已經存在')

return telephone

以上是對某個字段進行驗證,如果驗證資料的時候,需要針對多個字段進行驗證,那麼可以重寫clean方法。比如註冊時驗證兩次輸入密碼是否一致:

from django.core import validators

from django import forms

class myform(forms.form):

telephone = forms.charfield(validators=[validators.regexvalidator("1[345678]\d",message='請輸入正確的手機號碼')])

​ pwd1 = forms.charfield(max_length=12)

pwd2 = forms.charfield(max_length=12)

# 如果來到clean方法說明之前每個欄位都驗證成功了

def clean(self):

cleaned_data = super().clean()

pwd1 = cleaned_data.get('pwd1')

pwd2 = cleaned_data.get('pwd2')

if pwd1 != pwd2:

raise forms.validationerror('兩次輸入密碼不一致!')

else:

return cleaned_data

如果驗證失敗了, 那麼有一些錯誤資訊是我們需要傳給前端的。 這時候我們可以通過以下屬性來獲取:

1. form.errors : 這個屬性獲取的錯誤資訊是乙個包含了 html 標籤的錯誤資訊。

2. form.errors.get_json_data() : 這個方法獲取到的是乙個字典型別的錯誤資訊。 將某個欄位的名字作為 key , 錯誤資訊作為值的乙個字典。

3. form.as_json() : 這個方法是將 form.get_json_data() 返回的字典 dump 成 json 格式的字串, 方便進行傳輸。

4. 上述方法獲取的字段的錯誤值, 都是乙個比較複雜的資料。 比如以下:

, ]}
class myform(forms.form):

username = forms.urlfield(max_length=4)

def get_errors(self):

errors = self.errors.get_json_data()

new_errors = {}

for key,message_dicts in errors.items():

messages =

for message in message_dicts:

new_errors[key] = messages

return new_errors

這樣就可以把某個字段所有的錯誤資訊直接放在這個列表中。

Django中表單Form的使用

在django中對表單form的定義涉及三個檔案 1 model.py 定義form對應到資料庫中的表,如 from django.db import models create your models here.from django.db import models class student ...

Django框架 表單驗證

表單是通過類實現的,繼承自forms.form,然後在裡面定義要驗證的字段.在表單中,建立欄位跟模型是一模一樣的,但是沒有null true或者blank true等這幾種引數了,有的引數是required true false.定義乙個form forms.py from django impor...

Django高階 表單 驗證

form.is valid 方法被呼叫時觸發驗證 def is valid self pass 最終層層呼叫會呼叫 self.full clean deffull clean self self.clean fields self.clean form def clean fields 驗證字段 f...