Flask基础(16)-->WTForms表单创建和简单验证
Flask基础(16)-->WTForms表单创建和简单验证
前言:使用Flask_WTF需要配置参数SECRET_KEY
CSRF_ENABLED是为了CSRF(跨站请求伪造)保护。SECRET_KEY用来生成加密令牌,
当CSRF激活的时候,该设置会根据设置的秘钥生成加密令牌。
下一篇我再为大家详细叙述一下CSRF相关内容。
下面是为大家准备的一个示例案例:
- 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)
- 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>