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>