zoukankan      html  css  js  c++  java
  • 【Flask】WTForms基本使用

    # WTForms笔记:
    这个库一般有两个作用。第一个就是做表单验证,把用户提交上来的数据进行验证是否合法。第二个就是做模版渲染。

    ### 做表单验证:
    1. 自定义一个表单类,继承自wtforms.Form类。
    2. 定义好需要验证的字段,字段的名字必须和模版中那些需要验证的input标签的name属性值保持一致。
    3. 在需要验证的字段上,需要指定好具体的数据类型。
    4. 在相关的字段上,指定验证器。
    5. 以后在视图中,就只需要使用这个表单类的对象,并且把需要验证的数据,也就是request.form传给这个表单类,以后调用form.validate()方法,如果返回True,那么代表用户输入的数据都是合法的,否则代表用户输入的数据是有问题的。如果验证失败了,那么可以通过form.errors来获取具体的错误信息。
    示例代码如下: 

     1 # coding:utf-8
     2 from flask import Flask, request, render_template
     3 from wtforms import Form, StringField, PasswordField, SubmitField
     4 from wtforms.validators import Length, DataRequired, EqualTo
     5 
     6 
     7 class RegistForm(Form):
     8     username = StringField(u'用户名', validators=[DataRequired(), Length(3, 10, message=u'请输入3-10位的用户名')])
     9     password = PasswordField(u'密码', validators=[DataRequired(), Length(6, 10)])
    10     password2 = PasswordField(u'重复密码', validators=[DataRequired(), EqualTo('password')])
    11     submit = SubmitField(u'注册')
    12 
    13 app = Flask(__name__)
    14 
    15 
    16 @app.route('/')
    17 def hello_world():
    18     return 'Hello World!'
    19 
    20 
    21 @app.route('/regist/', methods=['GET', 'POST'])
    22 def regist():
    23     if request.method == "GET":
    24         return render_template('regist.html')
    25     else:
    26         form = RegistForm(request.form)
    27         if form.validate():
    28             return u'注册成功'
    29         else:
    30             print form.errors
    31             return u'注册失败'
    32 
    33 
    34 if __name__ == '__main__':
    35     app.run(debug=True)

    ### 常用的验证器:
    数据发送过来,经过表单验证,因此需要验证器来进行验证,以下对一些常用的内置验证器进行讲解:
    1. Email:验证上传的数据是否为邮箱。
    2. EqualTo:验证上传的数据是否和另外一个字段相等,常用的就是密码和确认密码两个字段是否相等。
    3. InputRequir:原始数据的需要验证。如果不是特殊情况,应该使用InputRequired。
    3. Length:长度限制,有min和max两个值进行限制。
    4. NumberRange:数字的区间,有min和max两个值限制,如果处在这两个数字之间则满足。
    5. Regexp:自定义正则表达式。
    6. URL:必须要是URL的形式。
    7. UUID:验证UUID。

    代码示例如下:

    1 class LoginForm(Form):
    2     email = StringField(validators=[Email(), ])
    3     username = StringField(validators=[InputRequired()])
    4     age = IntegerField(validators=[NumberRange(12, 100)])
    5     phone = StringField(validators=[Regexp(r'1[34578]d{9}')])
    6     url = StringField(validators=[URL()])
    7     uuid = StringField(validators=[UUID()])

    ### 自定义验证器:
    如果想要对表单中的某个字段进行更细化的验证,那么可以针对这个字段进行单独的验证。步骤如下:
    1. 定义一个方法,方法的名字规则是:`validate_字段名(self,filed)`。
    2. 在方法中,使用`field.data`可以获取到这个字段的具体的值。
    3. 如果数据满足条件,那么可以什么都不做。如果验证失败,那么应该抛出一个`wtforms.validators.ValidationError`的异常,并且把验证失败的信息传到这个异常类中。
    示例代码:

     1 class LoginForm(Form):
     2     email = StringField(validators=[Email(), ])
     3     username = StringField(validators=[InputRequired()])
     4     age = IntegerField(validators=[NumberRange(12, 100)])
     5     phone = StringField(validators=[Regexp(r'1[34578]d{9}')])
     6     url = StringField(validators=[URL()])
     7     # uuid = StringField(validators=[UUID()])
     8     captcha = StringField(validators=[Length(4, 4)])
     9     # 自定义验证
    10     def validate_captcha(self, field):
    11         if field.data != '1234':
    12             raise ValidationError(u'validate error!')
  • 相关阅读:
    zznuoj 2173 春天的英雄梦
    zznuoj 2171: 春天的致富梦
    zznuoj 2169: 春天的打水梦
    zznuoj 2168 大家好 我是水题
    西安赛打铁队检讨书
    B-number HDU
    Bomb HDU
    CodeForces
    1140
    Frequent Subsets Problem
  • 原文地址:https://www.cnblogs.com/chen0427/p/8858810.html
Copyright © 2011-2022 走看看