如何在测试 django 时禁用 csrf?

kur*_*tgn 1 testing django csrf

我在使用 csrf 令牌测试视图时遇到问题。

这段代码

class ViewTests(TestCase):
    def test_bets_view(self):
        login_page = self.client.get('/users/login/')
        print(login_page.content)
Run Code Online (Sandbox Code Playgroud)

返回带有 CSRF 隐藏输入的 HTML。

我需要将这个东西与以前的 HTML 进行比较,

expected_html = render_to_response('login.html',
                                   dictionary={'form': LoginForm()})
Run Code Online (Sandbox Code Playgroud)

没有隐藏的 CSRF 输入。所以断言失败。

如何在测试客户端中禁用 CSRF 渲染?

小智 5

您可以在单元测试中覆盖中间件设置,如下所示:

from django.test import override_settings

testing_middleware = [ ... anything but csrf middleware goes here ]


class TestWhatever(TestCase)
    @override_settings(MIDDLEWARE=testing_middleware)
    def testSomething():
        # no csrf error will occur 
        self.client.post('/', data={ ... })
Run Code Online (Sandbox Code Playgroud)