zoukankan      html  css  js  c++  java
  • 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>

        

  • 相关阅读:
    react-动画
    react-json渲染
    SQL 只取重复记录一条记录并且是最小值
    SQL 函数:树结构指定父节点遍历所有的子节点
    EasyUI treegrid 删除一条或多条记录
    String.Format数字格式化输出 {0:N2} {0:D2} {0:C2} (转)
    EasyUI 左,右(上、下)布局
    DataTable 树形构造加全部
    easyui datagrid 格式化列显示两位小数、千分位
    c# 判断文件是否已使用
  • 原文地址:https://www.cnblogs.com/888888CN/p/9487756.html
Copyright © 2011-2022 走看看