报错:{‘csrf_token‘: [‘The CSRF token is missing.‘]}

flask实现一个简单的注册界面报错

register.html

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="" method="post">
<!--    {
  
  { form.hidden_tag() }}-->
    {
  
  {form.username.label}}
{
  
  {form.username}}
<br>
{
  
  {form.password.label}}
{
  
  {form.password}}
    <br>
{
  
  {form.password2.label}}
{
  
  {form.password2}}
<br>
{
  
  {form.submit}}
</form>

</body>
</html>

表单.py

复制代码
from flask import Flask, render_template, request
from wtforms import StringField, PasswordField, SubmitField
from flask_wtf import FlaskForm
from wtforms.validators import DataRequired, EqualTo


app = Flask(__name__)
app.config['SECRET_KEY'] = 'abc123'


class Register(FlaskForm):
    username = StringField(label='Username', validators=[DataRequired("用户名不能为空")])
    password = PasswordField(label='password', validators=[DataRequired("密码不能为空")])
    password2 = PasswordField(label='password2', validators=[DataRequired("密码不能为空"), EqualTo('password')])
    submit = SubmitField(label='Sign Up')


@app.route('/register', methods=[ 'GET','POST'])
def register():
    form = Register()
    if request.method == 'POST':
        print(999)
        if form.validate_on_submit():
            print("验证成功")
            username = form.username.data
            password = form.password.data
            password2 = form.password2.data
            print(username, password, password2)
        else:
            print(form.errors)
            print("验证失败")
    elif request.method == 'GET':
        return render_template('register.html', form=form)
    return render_template('register.html', form=form)


if __name__ == '__main__':
    app.run(debug=True)
  • {'csrf_token': ['The CSRF token is missing.']} 表示在表单提交时,缺少 CSRF(跨站请求伪造)令牌。

  • 当使用 Flask-WTF 时,为了防止 CSRF 攻击,默认会启用 CSRF 保护。这意味着在表单中需要包含一个 CSRF 令牌,并且在表单提交时,服务器会验证这个令牌是否存在且有效。

    在你的 register.html 模板中,确保使用 form.hidden_tag() 来包含 CSRF 令牌。

相关推荐
传人once4 小时前
多图片上传预览功能如何写
前端·css·html·jquery·html5
Eric.465 小时前
Wan‑Animate+MiniMax-H3 本地部署 AI 漫剧流水线:8G 显存动作迁移与动态分镜工程实战
前端·人工智能·comfyui·ai漫剧
库拉镜像AI牛牛6 小时前
短剧内容自动化生产:知漫剧工作室落地教程
大数据·服务器·前端·人工智能·语音识别
律宏阔6 小时前
Flutter 列表图片内存优化:CachedNetworkImage 与 ClipRRect 的取舍
前端·flutter
行者全栈架构师6 小时前
【鸿蒙心迹】相册文搜图工程化落地:HarmonyOS 7.0 端侧 AI 检索全链路实战与 5 个踩坑解法
前端
律宏阔6 小时前
Dart 3 Record:解决 Future.wait 异构返回值的类型问题
前端·flutter
Seraphina366 小时前
DVWA(XSS Reflected/Stored High,CSRF Low)
前端·xss·csrf
默_笙7 小时前
🍔 中间件不只是打日志:四个钩子、一次短路,和自带的工具
前端·javascript
程序员老赵8 小时前
Docker 部署 Dolibarr:轻松搭建开源 ERP/CRM 平台
运维·前端·后端
星禾元亨8 小时前
同一件事有三份资料,AI 该信哪一份?冲突判定、优先级链与处置流程
前端·人工智能