Flask基础(16)-->WTForms表单创建和简单验证

Flask基础(16)-->WTForms表单创建和简单验证

 

前言:使用Flask_WTF需要配置参数SECRET_KEY
CSRF_ENABLED是为了CSRF(跨站请求伪造)保护。SECRET_KEY用来生成加密令牌,
当CSRF激活的时候,该设置会根据设置的秘钥生成加密令牌。

下一篇我再为大家详细叙述一下CSRF相关内容。

下面是为大家准备的一个示例案例:

  1. WTForms_test.py(视图页)

    from flask import Flask,render_template,request,flash
    # 导入wtf扩展的表单类
    from flask_wtf import FlaskForm
    # 导入自定义表单需要的字段
    from wtforms import SubmitField,StringField,PasswordField
    # 导入wtf扩展提供的表单验证器
    from wtforms.validators import DataRequired,EqualTo
    
    app = Flask(__name__)
    app.config["WTF_CSRF_ENABLED"] = False
    app.secret_key = "adfasfssdfdsf"
    
    # 自定义表单类,文本字段,密码字段,提交按钮
    class RegisterForm(FlaskForm):
        username = StringField("用户名:", validators=[DataRequired("请输入用户名")], render_kw={"placeholder": "请输入用户名"})
        password = PasswordField("密码:", validators=[DataRequired("请输入密码")],render_kw={"placeholder": "请输入密码"})
        password2 = PasswordField("确认密码:", validators=[DataRequired("请输入确认密码"), EqualTo("password", "两次密码不一致")],render_kw={"placeholder": "请确认密码"})
        submit = SubmitField("注册")
    
    # 定义根路由视图函数,生成表单对象,获取表单数据,进行表单数据验证
    @app.route('/demo1',methods=["get","post"])  # 获取表单的方式get和post都可以
    def demo1():
        register_form = RegisterForm()   # 获取表单对象
        # 进行表单验证
        if register_form.validate_on_submit():  # 当submit表单提交时触发验证,那么表单提交成功,即:所有验证都通过触发判断
            # username = request.form.get("username")
            # password = request.form.get("password")
            # password2 = request.form.get("password2")
            # 表单提交验证通过,在此处可以获取表单数据,保存到数据库,从而完成注册
            return "register success" # 返回给客户端注册成功的提示
        else:
            if request.method == "POST":  # 表单提交并且表单验证失败
                flash("用户名或者密码错误") # 返回给客户端失败提示
        return render_template("WTForms_test.html",form = register_form)  # 将自定义表单数据提交给模板页
    
    
    if __name__ == '__main__':
        app.run(debug = True)
  2. WTForms_test.html(模板页)
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>WTForms_test</title>
    </head>
    <body>
    <form method="post">  
        {{ form.username.label }} {{ form.username }}<br/>  # 由视图函数获取注册表单对象register_form,然后通过render_template传递到模板,由form接收
        {{ form.password.label }} {{ form.password }}<br/>
        {{ form.password2.label }} {{ form.password2 }}<br/>
        {{ form.submit }}
    </form>
    {% for message in get_flashed_messages() %}  # 视图函数中flash闪现过来的是一个消息队列,可以通过遍历get_flashed_messsages()获取
    {{ message }}    # 显示flash闪现过来的消息
    {% endfor %}
    
    </body>
    </html>

     

      

 

posted @ 2018-08-16 15:50  OldELeven  阅读(787)  评论(0编辑  收藏  举报