相关疑难解决方法(0)

Flask在unittest中禁用CSRF

在我的项目中__init__.py我有这个:

app = Flask(__name__)
app.config.from_object('config')
CsrfProtect(app)
db = SQLAlchemy(app)
Run Code Online (Sandbox Code Playgroud)

我的开发配置文件如下所示:

import os
basedir = os.path.abspath(os.path.dirname(__file__))

DEBUG = True
WTF_CSRF_ENABLED = True
SECRET_KEY = 'supersecretkey'
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'project.db')
SQLALCHEMY_TRACK_MODIFICATIONS = False
Run Code Online (Sandbox Code Playgroud)

在我的unittest setUp中我有这个:

from project import app, db

class ExampleTest(unittest.TestCase):
   def setUp(self):
        app.config['TESTING'] = True
        app.config['WTF_CSRF_ENABLED'] = False
        app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://'
        self.app = app.test_client()
        db.create_all()
Run Code Online (Sandbox Code Playgroud)

理论上,在这里将WTF_CSRF_ENABLED设置为False应该可以防止单元测试的CSRF,但是如果我在单元测试时进行POST,我仍然会遇到CSRF错误.我认为这是因为我已经调用了CsrfProtect(app)而WTF_CSRF_ENABLED为True(当我导入app时,它被调用).如果我在配置文件中设置WTF_CSRF_ENABLED = False,它将按预期工作.

无论如何我可以在启用后禁用CSRF吗?或者我在这里咆哮错误的树?

flask flask-wtforms

6
推荐指数
2
解决办法
3994
查看次数

标签 统计

flask ×1

flask-wtforms ×1