安装 Flask-WTF
# 在虚拟环境下安装
pip install flask-wtf
定义登录页面模板 login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Flask_WTF</title>
<style type="text/css">
.div1 {
height: 180px;
width: 380px;
border: 1px solid #8a8989;
margin: 0 auto;
}
.input {
display: block;
width: 350px;
height: 40px;
margin: 10px auto;
}
.button {
background: #2066c5;
color: white;
font-size: 18px;
font-weight: bold;
height: 50px;
border-radius: 4px;
}
</style>
</head>
<body>
<div class="div1">
<form action="login" method="post">
{# 开启CSRF保护 #}
{{form.hidden_tag()}}
{# 用户名输入框 #}
{{form.name(size=16,id='name',class='input' )}}
{# 密码输入框 #}
{{form.password(size=16,id='password',class='input')}}
<!-- 提交按钮 -->
<input type="submit" value="登录" class="input button" />
</form>
</div>
</body>
</html>
定义登录保护文件 config.py
#coding:utf8
import os
SECRET_KEY = os.urandom(24) # 生成随机密钥
CSRF_ENABLED = True # 开启CSRF保护
# -*- coding:utf-8 -*-
# 引入Form基类
from flask_wtf import FlaskForm
# 引入Form元素父类
from wtforms import StringField, PasswordField
# 引入Form验证父类
from wtforms.validators import DataRequired, Length
# 登录表单类,继承自FlaskForm类
class BaseLogin(FlaskForm):
# 用户名
name = StringField(
"name",
validators=[
DataRequired(), # 必须填写
Length(6, 16), # 限定长度为 6 - 16
],
render_kw={"placeholder": "输入用户名"}, # 提示输入信息
)
# 密码
password = PasswordField(
"password",
validators=[
DataRequired(),
Length(6, 16),
],
render_kw={"placeholder": "输入密码"},
)
定义主程序文件
from flask import Flask
from flask import render_template
# 导入自定义的BaseLogin验证表单类
from forms import BaseLogin
# 导入表单保护
import config
# 实例化及配置
app = Flask(__name__)
app.config.from_object(config)
# 定义处理函数和路由规则,接收GET和POST请求
@app.route("/login", methods=("POST", "GET"))
def baselogin():
# 实例化表单对象
form = BaseLogin()
# 判断数据是否符合要求
if form.validate_on_submit():
return "表单数据提交成功!"
else:
# 否则继续登录验证
return render_template("login.html", form=form)
@app.route("/")
def hello_world():
return "Hello World!"
if __name__ == "__main__":
app.run(debug=True)
参考资料
https://weread.qq.com/web/reader/0a932660718ac6bc0a9702e