gpt4 book ai didi

Flask 在单元测试中禁用 CSRF

转载 作者:行者123 更新时间:2023-12-03 15:32:14 27 4
gpt4 key购买 nike

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

app = Flask(__name__)
app.config.from_object('config')
CsrfProtect(app)
db = SQLAlchemy(app)

我的开发配置文件如下所示:
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

在我的单元测试设置中,我有这个:
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()

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

无论如何,我可以在启用 CSRF 后禁用它吗?还是我在这里吠错了树?

最佳答案

您可以使用配置变量 WTF_CSRF_ENABLED 禁用它,

例如

class TestConfig(Config):
TESTING = True
WTF_CSRF_ENABLED = False
...

app.config['WTF_CSRF_ENABLED'] = False
另见 flask-WTF documentation

关于Flask 在单元测试中禁用 CSRF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38624060/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com