Django - 测试客户端因csrf而收到403

时间:2014-02-17 17:21:58

标签: python django testing csrf django-testing

我正在使用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')

当我运行此测试时,我看到:

  

AssertionError:403!= 200

那么,请你告诉我我做错了什么?

1 个答案:

答案 0 :(得分:1)

客户端()具有以下__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')