我使用的是Django 1.6和python 3.3。
我正在尝试使用 django 测试客户端测试 POST 表单,它在发送请求后收到 403。如果我在我的视图方法中添加@csrf_exempt
,一切都很完美。但是 Django 文档说它应该与启用的 csrf 保护一起工作:
出于这个原因,Django 的 HTTP 测试客户端已被修改为在请求上设置一个标志,从而放松中间件和csrf_protect装饰器,以便它们不再拒绝请求。
这是我的测试代码:
def testSimple(self):
c = Client('Chrome 1.0')
from partners.views import cashier
response = c.post(reverse(cashier.simple), {'x': 123})
self.assertContains(response,'html')
这是一个视图:
def simple(request):
return render(request, 'partners/cashier/index.html')
当我运行此测试时,我看到:
断言错误: 403 != 200
所以,你能告诉我我做错了什么吗?
Client() 具有以下__init__
:
def __init__(self, enforce_csrf_checks=False, **defaults):
您正在将enforce_csrf_checks设置为 True b/c "Chrome 1.0"评估为真实!
如果要设置用户代理:
c = Client(HTTP_USER_AGENT='Mozilla/5.0')