报错:{‘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 分钟前
小程序登录不迷路:一篇文章搞定用户身份验证
前端·javascript·微信小程序
aesthetician8 分钟前
React 19.2.0: 新特性与优化深度解析
前端·javascript·react.js
FIN666823 分钟前
射频技术领域的领航者,昂瑞微IPO即将上会审议
前端·人工智能·前端框架·信息与通信
U.2 SSD32 分钟前
ECharts漏斗图示例
前端·javascript·echarts
江城开朗的豌豆32 分钟前
我的小程序登录优化记:从短信验证到“一键获取”手机号
前端·javascript·微信小程序
excel36 分钟前
Vue Mixin 全解析:概念、使用与源码
前端·javascript·vue.js
IT_陈寒43 分钟前
Java性能优化:这5个Spring Boot隐藏技巧让你的应用提速40%
前端·人工智能·后端
勇往直前plus1 小时前
CentOS 7 环境下 RabbitMQ 的部署与 Web 管理界面基本使用指南
前端·docker·centos·rabbitmq
北海-cherish7 小时前
vue中的 watchEffect、watchAsyncEffect、watchPostEffect的区别
前端·javascript·vue.js
2501_915909068 小时前
HTML5 与 HTTPS,页面能力、必要性、常见问题与实战排查
前端·ios·小程序·https·uni-app·iphone·html5