python框架------Flask基础教程--6.2 Flask-WTF常用字段和验证器

Flask-WTF常用字段和验证器

一、Field常用参数

在使用Field的时候,经常需要传递一些参数进去,以下将对一些常用的参数进行解释:

  • label(第一个参数)Fieldlabel的文本。
  • validators:验证器。
  • idFieldid属性,默认不写为该属性名。
  • 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,但是渲染出去的时候是textinput

  • IntegerField:整形的Field。同FloatField

  • RadioFieldradio类型的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:渲染出来的是一个passwordinput标签。

  • TextAreaField:渲染出来的是一个textarea

三、常用的验证器

数据发送过来,经过表单验证,因此需要验证器来进行验证,以下对一些常用的内置验证器进行讲解:

  • Email:验证上传的数据是否为邮箱。
  • EqualTo:验证上传的数据是否和另外一个字段相等,常用的就是密码和确认密码两个字段是否相等。
  • InputRequired:原始数据的需要验证。如果不是特殊情况,应该使用InputRequired
  • Length:长度限制,有minmax两个值进行限制。
  • NumberRange:数字的区间,有minmax两个值限制,如果处在这两个数字之间则满足。
  • 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个字符')
posted @ 2022-01-25 10:06  巴蜀秀才  阅读(132)  评论(0编辑  收藏  举报