报错:{‘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 令牌。

相关推荐
天黑请闭眼20 小时前
视频文件上传至服务器后浏览器无法在线播放
前端
一位搞嵌入式的 genius20 小时前
前端实战开发(四):从迭代器到异步编程:ES6 Generator 全面解析 + 实战问题排查
开发语言·前端·es6·前端实战
拉不动的猪20 小时前
# 关于初学者对于JS异步编程十大误区
前端·javascript·面试
玖釉-20 小时前
解决PowerShell执行策略导致的npm脚本无法运行问题
前端·npm·node.js
Larcher20 小时前
新手也能学会,100行代码玩AI LOGO
前端·llm·html
徐子颐21 小时前
从 Vibe Coding 到 Agent Coding:Cursor 2.0 开启下一代 AI 开发范式
前端
小月鸭21 小时前
如何理解HTML语义化
前端·html
jump68021 小时前
url输入到网页展示会发生什么?
前端
诸葛韩信21 小时前
我们需要了解的Web Workers
前端
brzhang21 小时前
我觉得可以试试 TOON —— 一个为 LLM 而生的极致压缩数据格式
前端·后端·架构