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

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

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>

      

上一篇:leetcode#42 Trapping rain water的五种解法详解


下一篇:[array] leetcode - 42. Trapping Rain Water - Hard