from flask import Flask, render_template, redirect, url_for, session
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, EqualTo
app = Flask(__name__)
# 混淆,CSRF需要密钥,session也需要
app.config["SECRET_KEY"] = "SDADASDadsdsdw1514"
# 定义表单模型类
class RegisterForm(FlaskForm):
user_name = StringField(label=u"用户名", validators=[DataRequired(u"用户名不能为空")])
password1 = PasswordField(label=u"密码", validators=[DataRequired(u"密码不能为空")])
password2 = PasswordField(label=u"确认密码", validators=[DataRequired(u"确认密码不能为空"),EqualTo("password1", u"两次密码不一致")])
submit = SubmitField(label=u"提交")
@app.route("/register", methods=["GET", "POST"])
def register():
# 创建表单对象
form = RegisterForm()
# 验证:判断form中的数据是否合理,合理返回真,否则为假
# 除了表单上面的所有条件外还要有csrf_token
if form.validate_on_submit():
uname = form.user_name.data
pwd1 = form.password1.data
pwd2 = form.password2.data
session["uname"] = uname
print(uname, pwd1, pwd2)
return redirect(url_for("index"))
# 渲染模板
return render_template("register.html", form=form)
@app.route("/index")
def index():
uname = session.get("uname")
return "hello %s" % uname
if __name__ == '__main__':
app.run(debug=True)
页面代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="post">
{{form.csrf_token}}
{{form.user_name.label}}
<p>{{form.user_name}}</p>
{%for msg in form.user_name.errors%}
<p>{{msg}}</p>
{%endfor%}
{{form.password1.label}}
<p>{{form.password1}}</p>
{%for msg in form.password1.errors%}
<p>{{msg}}</p>
{%endfor%}
{{form.password2.label}}
<p>{{form.password2}}</p>
{%for msg in form.password2.errors%}
<p>{{msg}}</p>
{%endfor%}
{{form.submit}}
</form>
</body>
</html>