美文网首页
Flask中的wtform使用

Flask中的wtform使用

作者: 极客匠 | 来源:发表于2020-02-08 23:05 被阅读0次

简介:WTForms是一个Flask集成的框架,或者是说库。用于处理浏览器表单提交的数据。它在Flask-WTF 的基础上扩展并添加了一些随手即得的精巧的帮助函数,这些函数将会使在 Flask 里使用表单更加有趣。

安装:

pip3 install wtforms

WTFForms支持的HTML标注字段

字段类型 说  明
StringField 文本字段
TextAreaField 多行文本字段
PasswordField 密码文本字段
HiddenField 隐藏文本字段
DateField 文本字段,值为 datetime.date 格式
DateTimeField 文本字段,值为 datetime.datetime 格式
IntegerField 文本字段,值为整数
DecimalField 文本字段,值为 decimal.Decimal
FloatField 文本字段,值为浮点数
BooleanField 复选框,值为 True 和 False
RadioField 一组单选框
SelectField 下拉列表
SelectMultipleField 下拉列表,可选择多个值
FileField 文件上传字段
SubmitField 表单提交按钮
FormField 把表单作为字段嵌入另一个表单
FieldList 一组指定类型的字段

WTForms 内建的Validators验证函数

函数 说明

Email 验证电子邮件地址
EqualTo 比较两个字段的值;常用于要求输入两次密码进行确认的情况
IPAddress 验证 IPv4 网络地址
Length 验证输入字符串的长度
NumberRange 验证输入的值在数字范围内
Optional 无输入值时跳过其他验证函数
Required 确保字段中有数据
Regexp 使用正则表达式验证输入值
URL 验证 URL
AnyOf 确保输入值在可选值列表中
NoneOf 确保输入值不在可选值列表中

自定义Validators验证器

  1. in-line validator(内联验证器)
    也就是自定义一个验证函数,在定义表单类的时候,在对应的字段中加入该函数进行认证。下面的my_length_check函数就是用于判name字段长度不能超过50.
def my_length_check(form, field):
    if len(field.data) > 50:
        raise ValidationError('Field must be less than 50 characters')

class MyForm(Form):
    name = StringField('Name', [InputRequired(), my_length_check])
  1. 通用且可重用的验证函数
    一般是以validate开头,加上下划线再加上对应的field字段(validate_filed),浏览器在提交表单数据时,会自动识别对应字段所有的验证器,然后执行验证器进行判断。

    class RegistrationForm(FlaskForm):
        email = StringField('Email', validators=[DataRequired(), Length(1, 60), Email()])
        username = StringField('Username', validators=[DataRequired(), Length(1, 60),
            Regexp('^[A-Za-z][A-Za-z0-9_.]*$', 0, 'username must have only letters, numbers dots or underscores')])
        password = PasswordField('Password', validators=[DataRequired(), EqualTo('password2', message='password must match')])
        password2 = PasswordField('Confirm password', validators=[DataRequired()])
    
        def validate_email(self, field):
            if User.objects.filter(email=field.data).count() > 0:
                raise ValidationError('Email already registered')
    
        def validate_username(self, field):
            if User.objects.filter(username=field.data).count() > 0:
                raise ValidationError('Username has exist')
    

    Widget组件

    登录界面为实例:

    from wtforms import StringField, PasswordField, BooleanField, validators, widgets, Form
    from wtforms.fields import html5, simple
    
    class LoginForm(Form):
        username = StringField(
            label="username:", validators=[
                validators.DataRequired(message='用户名不能为空.')],
            widget=widgets.TextInput(), )
        password = PasswordField(
            label='password:', validators=[
                validators.DataRequired(message='密码不能为空.'),
                validators.Length(min=8, message='密码长度必须大于%(min)d'),
            ], widget=widgets.PasswordInput(), )
    
    
    

    总结

    flask表单这一部分我们都是使用Flask-WTF和WTForms来做的,我们可以通过做一些简单的demo来加强理解他们的原理并且强化flask的基础。

参考链接:https://www.jianshu.com/p/7e16877757f8

每天多努力那么一点点,积少成多

相关文章

网友评论

      本文标题:Flask中的wtform使用

      本文链接:https://www.haomeiwen.com/subject/rxdixhtx.html