• Flask-WTF的使用


    WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。当网站中需要用到表单时,WTForms变得很有效。应该把表单定义为类,作为单独的一个模块。

    烧瓶-WTF — 烧瓶-WTF 文档 (1.0.x) (flask-wtf.readthedocs.io)icon-default.png?t=M85Bhttps://flask-wtf.readthedocs.io/en/1.0.x/

    安装

    pip install wtforms

    创建表单

    通常是创建一个Form的子类,表单的中的字段作为类的属性,如:

    1. from flask_wtf import FlaskForm
    2. from wtforms import StringField
    3. from wtforms.validators import DataRequired
    4. class MyForm(FlaskForm):
    5. name = StringField('name', validators=[DataRequired()])

    Form的主要属性:

    • data:字典类型,包括每一个字段的数据。如果需要频繁访问字段值,可以使用form..data进行访问
    • errors:字典类型,包括每一个字段的错误信息。

     Form的主要字段类型:

    • BooleanField
      •  复选框,值为True和False
    • DateField
      •  文本字段,值为datetime.date格式
      • 如:YYYY-MM-DD

    DateTimeField 

    •  文本字段,值为datetime.datetime格式
      •  如:YYYY-MM-DD HH:MM:SS
    • DecimalField
      •  文本字段,值为decimal.Decimal
    • FileField
      •  文件上传字段
    • FloatField
      •  文本字段,值为浮点数
    • FormField
      •  把表单作为字段嵌入另一个表单
    • HiddenField
      •  隐藏文本字段
    • IntegerField
      •  文本字段,值为整数
    • PasswordField
      •  密码文本字段
    • RadioField
      •  一组单选框
    • SelectField
      •  下拉列表
      • choices参数表示下列的内容,需要是一个列表,列表的每一项是一个元组,如:[(0,'男'),(1,'女')]。
      • coerce参数表示实际选择的内容格式。一般为int
    • SelectMultipleField
      •  下拉列表,可选择多个值
      • 参数与SelectField相同
    • StringField
      •  文本字段
    • SubmitField
      •  表单提交按钮
    • TextAreaField
      •  多行文本字段
    • TextField.
      •  文本域字段
    •  RecaptchaField
      •  验证码字段

    以上字段中都有两个参数,第一个为label,表示这个表单的标签,第二个是validators,是一个列表,表示验证器。

    在视图处理程序中验证请求

    1. @app.route('/submit', methods=['GET', 'POST'])
    2. def submit():
    3. form = MyForm()
    4. if form.validate_on_submit():
    5. return redirect('/success')
    6. return render_template('submit.html', form=form)

     当form.validate_on_submit()返回True时,则表示验证失败。

    flask wtforms 常用验证器: 

    • Email: 验证上传的数据是否为邮箱
    • EqualTo:验证上传的数据是否和另外一个字段相等,常用的就是密码和确认密码两个字段是否相等。
    • InputRequired:原始数据的验证。如果不是特说情况,应该使用InutRequired。
    • Length: 长度限制,有min 和max两个值进行限制。
    • NumberRange:数字区间, 有min和max两个值限制, 荣国处在两个数字之间满足。
    • Regexp:自定义正则表达式。
    • URL:必须是URL形式。
    • UUID:验证UUID
    1. from wtforms import Form, StringField, IntegerField
    2. from wtforms.validators import (Email, EqualTo, InputRequired, Length, NumberRange, Regexp, URL, UUID,ValidationError)
    3. class LoginForm(Form):
    4. email = StringField(validators=[Email()])
    5. username = StringField(validators=[InputRequired, Length(min=3, max=15)])
    6. age = IntegerField(validators=[NumberRange(1,150)])
    7. phont = StringField(validators=[Regexp(r'1[3,5,6,7,8]\d{9}')])
    8. homeurl = StringField(validators=[URL()])
    9. uuid = StringField(validators=[UUID()])
    10. captcha = StringField(validators=[Length(6, 6)])

    自定义验证器

    1. from flask_wtf import FlaskForm
    2. from wtforms.validators import ValidationError
    3. from wtforms import StringField
    4. class LoginForm(FlaskForm):
    5. name = StringField()
    6. # 自定义验证器,validate_(写需要验证的字段名captcha)
    7. def validate_name(self, field):
    8. # 在ValidationError中填写错误提示信息, 错误信息可通过 form.errors 获取到
    9. if not field.data:
    10. raise ValidationError('请输入名字')

    如果验证失败,抛出ValidationError错误即可。

  • 相关阅读:
    Linux命令之find
    7.synchronized锁的应用
    Halcon Camera-calibration 相关算子(二)
    ☆打卡算法☆LeetCode 29、两数相除 算法解析
    STL排序、拷贝和替换算法
    一起学数据结构(6)——栈和队列
    C语言 while循环1
    GIS工具maptalks开发手册(二)01-02之GeoJSON转化为Geometry——渲染点
    二进制中1的个数 C++实现
    Docker基础
  • 原文地址:https://blog.csdn.net/HHYZBC/article/details/126918249