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

相关推荐
阿珊和她的猫3 小时前
v-scale-scree: 根据屏幕尺寸缩放内容
开发语言·前端·javascript
加班是不可能的,除非双倍日工资7 小时前
css预编译器实现星空背景图
前端·css·vue3
wyiyiyi7 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
gnip8 小时前
vite和webpack打包结构控制
前端·javascript
excel8 小时前
在二维 Canvas 中模拟三角形绕 X、Y 轴旋转
前端
阿华的代码王国9 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
一条上岸小咸鱼9 小时前
Kotlin 基本数据类型(三):Booleans、Characters
android·前端·kotlin
Jimmy9 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程
ZXT9 小时前
promise & async await总结
前端
Jerry说前后端9 小时前
RecyclerView 性能优化:从原理到实践的深度优化方案
android·前端·性能优化