文章目录
扩展模块
- flask-sqlalchmy,连接数据库
- flask-login,处理用户的登录,认证
- flask-session,会话保持,默认对用户数据加密,存储在客户端浏览器的cookie中,每次请求时携带cookie来识别用户;也可以存储在服务端的文件、数据库、缓存中;
- flask-wtf 处理表单数据,防止csrf攻击;flask-wtf文档
flask-wtf 的简单使用
基于flask-wtf 制作简单的注册、登录页面;
- 注册页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册页面</title>
<script src="/static/js/index.js"></script>
<link rel="stylesheet" href="/static/css/index.css">
</head>
<body>
<form method="POST" action="/reg">
{
{ form.csrf_token }}<br>
<h3>欢迎注册</h3><br>
{
{ form.uname.label }} {
{ form.uname(size=20) }}<br>
{
{ form.passwd.label }} {
{ form.passwd(size=20) }}<br>
{
{ form.confirm_passwd.label }} {
{ form.confirm_passwd(size=20)}}<br>
<input type="submit" value="登录">
{% if form.errors %}
<ul class="errors">
{% for error in form.errors %}
<li>{
{ error }}字段验证未通过</li>
{% endfor %}
</ul>
{% endif %}
</form>
</body>
</html>
这里的form变量是flask渲染模板时,传入的表单对象。,form.csrf_token分别在表单中、cookie中生成一个秘钥,在提交表单时,cookie中的秘钥连同表单中的秘钥一同传给后端进行验证,验证通过则为合法的请求。
登录页面实现类似;
- flask后端定义表单子类、字段、验证器,app/_init_.py
# __author__ = "laufing"
import os
from flask import Flask
from .config import BaseConfig
app = Flask(__name__)
app.config.from_object(BaseConfig)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# 模板地址
app.template_folder = os.path.join(BASE_DIR, "templates")
# 静态资源地址
app.static_url_path = "/static/"
app.static_folder = os.path.join(BASE_DIR, "static")
# 导入表单
from flask_wtf import FlaskForm
# 导入字段
from wtforms import StringField, PasswordField, IntegerField, DateTimeField, BooleanField
from wtforms.validators import DataRequired, InputRequired # 必须输入
from wtforms.validators import EqualTo
class RegForm(FlaskForm):
uname = StringField("uname", validators=[InputRequired(), DataRequired()])
passwd = PasswordField("passwd", validators=[DataRequired()