python框架------Flask基础教程--6.2 Flask-WTF常用字段和验证器
Flask-WTF常用字段和验证器
一、Field
常用参数
在使用Field
的时候,经常需要传递一些参数进去,以下将对一些常用的参数进行解释:
label
(第一个参数):Field
的label
的文本。validators
:验证器。id
:Field
的id
属性,默认不写为该属性名。default
:默认值。widget
:指定的html
控件。
二、常用Field
-
BooleanField
:布尔类型的Field
,渲染出去是checkbox
。 -
FileField
:文件上传Field
。# forms.py from flask_wtf.file import FileField,FileAllowed,FileRequired class UploadForm(FlaskForm): avatar = FileField(u'头像:',validators=[FileRequired(),FileAllowed([])]) # app.py @app.route('/profile/',methods=('POST','GET')) def profile(): form = ProfileForm() if form.validate_on_submit(): filename = secure_filename(form.avatar.data.filename) form.avatar.data.save(os.path.join(app.config['UPLOAD_FOLDER'],filename)) return u'上传成功' return render_template('profile.html',form=form)
-
FloatField
:浮点数类型的Field
,但是渲染出去的时候是text
的input
。 -
IntegerField
:整形的Field
。同FloatField
。 -
RadioField
:radio
类型的input
。表单例子如下:# form.py class RegistrationForm(FlaskForm): gender = wtforms.RadioField(u'性别:',validators=[DataRequired()])
模板文件代码如下:
<tr> <td> {{ form.gender.label }} </td> <td> {% for gender in form.gender %} {{ gender.label }} {{ gender }} {% endfor %} </td> </tr>
app.py
文件的代码如下,给gender
添加了choices
:@app.route('/register/',methods=['POST','GET']) def register(): form = RegistrationForm() form.gender.choices = [('1',u'男'),('2',u'女')] if form.validate_on_submit(): return u'success' return render_template('register.html',form=form)
-
SelectField
:类似于RadioField
。看以下示例:# forms.py class ProfileForm(FlaskForm): language = wtforms.SelectField('Programming Language',choices=[('cpp','C++'),('py','python'),('text','Plain Text')],validators=[DataRequired()])
再来看app.py文件:
@app.route('/profile/',methods=('POST','GET')) def profile(): form = ProfileForm() if form.validate_on_submit(): print form.language.data return u'上传成功' return render_template('profile.html',form=form)
模板文件为:
<form action="/profile/" method="POST"> {{ form.csrf_token }} {{ form.language.label }} {{ form.language() }} <input type="submit"> </form>
-
StringField
:渲染到模板中的类型为<input type='text'>
,并且是最基本的文本验证。 -
PasswordField
:渲染出来的是一个password
的input
标签。 -
TextAreaField
:渲染出来的是一个textarea
。
三、常用的验证器
数据发送过来,经过表单验证,因此需要验证器来进行验证,以下对一些常用的内置验证器进行讲解:
Email
:验证上传的数据是否为邮箱。EqualTo
:验证上传的数据是否和另外一个字段相等,常用的就是密码和确认密码两个字段是否相等。InputRequired
:原始数据的需要验证。如果不是特殊情况,应该使用InputRequired
。Length
:长度限制,有min
和max
两个值进行限制。NumberRange
:数字的区间,有min
和max
两个值限制,如果处在这两个数字之间则满足。Regexp
:自定义正则表达式。URL
:必须要是URL
的形式。UUID
:验证UUID
。
四、自定义验证字段
使用validate_fieldname(self,field)
可以对某个字段进行更加详细的验证,如下:
class ProfileForm(FlaskForm):
name = wtforms.StringField('name',[validators.InputRequired()])
def validate_name(self,field):
if len(field.data) > 5:
raise wtforms.ValidationError(u'超过5个字符')
清澈的爱,只为中国