我有一个测试,我正在检查一些身份验证行为。在此测试中,我需要明确检查CSRF行为,因此我使用设置为enforce_csrf_checks
的测试客户端True
:
self.csrf_client = Client(enforce_csrf_checks=True)
我的问题是,对于我来说,最简单的方法是手动获取CSRF令牌,并通过POST请求发送给我的客户端吗?
是定义返回csrf(request)
的自定义测试视图,向该视图发出请求,提取CSRF令牌然后在POST请求中使用它的最佳选择,还是有一些更简单的方法可以获得要使用的CSRF令牌?
答案 0 :(得分:11)
我知道这是一个老问题,但我在寻找解决方案时偶然发现了这个问题,现在我想分享我的解决方案以防其他人对此有问题。
登录后,CSRF令牌确实存储在cookie中,并且访问它时我必须执行以下操作:
self.client = Client(enforce_csrf_checks=True)
self.client.login(username='temporary', password='temporary')
self.client.get("/url_to_the_form/")
csrf_token = self.client.cookies['csrftoken'].value
答案 1 :(得分:1)
CSRF令牌应作为cookie(名为"csrftoken"
)发送到客户端。预计客户端会发送该cookie并提供进一步的请求。您的Client
可以将Cookie复制到您需要的地方吗?