天天看點

python表單驗證wtf_表單 Flask-WTF - 校驗器

1 wtforms内置的校驗器

Class wtforms.validators.DataRequired(message=None)

此驗證器将會檢測field是否輸入了數值,實際上是進行了if field.data操作。并且,如數資料是一個字元串,那麼隻包含空格的字元串将會被認為是False。

參數:message-當驗證失敗時傳回的錯誤消息數:message-當驗證失敗時傳回的錯誤消息

class wtforms.validators.Email(message=None)

此驗證器驗證Email的位址,注意隻會驗證Email的格式,最好在使用的時候你能夠自己校驗他的真實性,比如激活或者查找

參數:message-當驗證失敗時傳回的錯誤消息驗證失敗時傳回的錯誤消息

class wtforms.validators.EqualTo(fieldname, message=None)

用于比較兩個Field的資料是否相等。

參數: filedname-你要比較的另一個Field的名稱

message-當驗證失敗時傳回的錯誤消息,可以用%(other_label)s和 %(other_name)s來更提供更多的錯誤消息

此驗證器可用于驗證一個或者多個相同field的情景,更改密碼的代碼

class wtforms.validators.InputRequired(message=None)

用于驗證field有資料輸入,注意與DataRequired的差別,InputRequired主要看是否輸入了資料,而DataRequired用于那些強制Post的資料

class wtforms.validators.IPAddress(ipv4=True, ipv6=False, message=None)

ipv4-當為Ture時,允許有效的IPv4位址(預設為True)

ipv6-當為Ture時,允許有效的IPv6位址(預設為False)

參數:message-當驗證失敗時傳回的錯誤消息

class wtforms.validators.Length(min=-1, max=-1,message=None)

驗證字元串的長度

min-輸入的最小的字元串長度,如果未指定,則不校驗最小字元串

max-輸入的最大的字元串長度,如果未指定,則不校驗最大字元串

message-當驗證失敗時傳回的錯誤消息,如果需要,可以通過%(min)d,%(max)d來自行設定

class wtforms.validators.NumberRange(min=None, max=None,message=None)

用于驗證資料是否在最小值與最大值之間,支援的常用的資料類型,如float等,不隻是int

min-輸入的最小的字元串長度,如果未指定,則不校驗最小字元串

max-輸入的最大的字元串長度,如果未指定,則不校驗最大字元串

message-當驗證失敗時傳回的錯誤消息,如果需要,可以通過%(min)d,%(max)d來自行設定

class wtforms.validators.Regexp(regex, flags=0, message=None)

通過正規表達式驗證

regex-正規表達式,也可以通過參數傳遞

flags-regex使用标示,如re.IGNORECASE,如果regex不是一個字元串将忽略

message-當驗證失敗時傳回的錯誤消息

class wtforms.validators.URL(require_tld=True, message=None)

通過正規表達式對URL進行簡單的驗證,與Email驗證器相似,可能在之後需要其他的方式驗證其真實性

require_tld-當設定為True時,必須在域名中包含頂級域名等,當需要驗證localhost時設定為False

2 自定義驗證器 - namefield驗證器

在類裡面,編寫 def validate_namefieldxxx(form, field)函數,通過raise ValidationError提示錯誤資訊,編寫在類裡面的驗證器,不需要在顯示在feild裡面指定validators=, 比如

class LoginForm(Form):

openid = StringField('openid', validators=[DataRequired()])

remember_me = BooleanField('remember_me', default=False)

def validate_remember_me(form, field):

if field.data != False:

raise ValidationError('remember_me must be False')

3 自定義驗證器 - 把驗證器編寫成單獨的函數

這樣需要在feild裡面指定validators=,比如

def validate_remember_me(form, field):

if field.data != False:

raise ValidationError('remember_me must be False2')

class LoginForm(Form):

openid = StringField('openid', validators=[DataRequired()])

remember_me = BooleanField('remember_me', default=False,

validators=[validate_remember_me ])

4 自定義驗證器 - 把驗證器編寫成單獨的類

class Length(object):

def __init__(self, min=-1, max=-1, message=None):

self.min = min

self.max = max

if not message:

message = u'Field must be between %i and %icharacters long.' % (min, max)

self.message = message

def __call__(self, form, field):

l = field.data and len(field.data) or 0

if l < self.min or self.max != -1 and l > self.max:

raise ValidationError(self.message)

length = Length

class MyForm(Form):

name = StringField('Name', [InputRequired(), length(max=50)])