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个字符')


清澈的爱,只为中国