您好我是python flask web开发的新手。我一直想知道我的代码有什么问题,我一直在让CSRF令牌丢失。我使用的是Flask-WTF版本0.11。有些情况下验证成功,当我尝试再次单击上传按钮时,它只会重新加载或有时弹出我的文本字段上方的CSRF Token Missing
字符串。这只发生在我在不同的域中访问时,它在我的localhost上运行:
这是我的config.py的部分代码:
class Config:
WTF_CSRF_ENABLED = True
SECRET_KEY = os.environ.get('SECRET_KEY') or 'hard to guess string'
这是我的login.html代码:
{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block title %}Chase POS - Login{% endblock %}
{% block page_content %}
<div class="page-header">
<h1>Login</h1>
</div>
{{ form.hidden_tag() }}
<div class="col-md-4">
{{ wtf.quick_form(form, method="POST", enctype="multipart/form-data") }}
</div>
{% endblock %}
这是我的views.py代码:
@main.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
user = User.query.filter_by(id=form.id.data).first()
if user is not None and user.verify_password(form.password.data):
try:
login_user(user, False)
upload_file()
return redirect(url_for('.login'))
except ValueError:
flash('Row ' + str(counter) + ': Incorrect value detected.')
except TypeError:
flash('Row ' + str(counter) + ': Data type mismatch. Failed to continue transaction.')
except AttributeError:
flash('Row ' + str(counter) + ': Some of the data cannot be found on the database.')
else:
flash('Invalid username or password.')
return render_template('login.html', form=form)
我甚至尝试禁用csrf但仍然遇到同样的错误。希望你能帮助我,提前谢谢
答案 0 :(得分:1)
将form.hidden_tag()
替换为form.hidden_tag
。或者,恢复为旧版本的Flask-WTF(v0.9),他们仍使用form.hidden_tag()
中的括号
答案 1 :(得分:1)
我在flask
和wtform
时遇到了同样的问题。添加CsrfProtect(app)
为我解决了这个问题。
from flask import Flask
from flask_wtf.csrf import CsrfProtect
app = Flask(__name__)
app.secret_key = 'very secret'
CsrfProtect(app)
在模板中,执行:
{{ form.hidden_tag() }}