代码之家  ›  专栏  ›  技术社区  ›  Alexey Malov

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

  •  3
  • Alexey Malov  · 技术社区  · 11 年前

    我使用的是Django 1.6和python 3.3。

    我正在尝试用django测试客户端测试POST表单,它在发送请求后收到403。如果我添加 @csrf_exempt 在我看来,一切都很完美。 但Django文档表示,它应该与启用的csrf保护配合使用:

    出于这个原因,Django的HTTP测试客户端已经被修改为在请求上设置一个标志,从而放松中间件和csrf_proctect装饰器,使它们不再拒绝请求。

    这是我的测试代码:

    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

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

    1 回复  |  直到 11 年前
        1
  •  1
  •   Nils Dmitriy Kuznetsov    11 年前

    Client()具有以下功能 __init__ :

    def __init__(self, enforce_csrf_checks=False, **defaults):

    您正在将enforce_csrf_checks设置为True b/c“Chrome 1.0”评估结果为True!

    如果要设置用户代理:

    c = Client(HTTP_USER_AGENT='Mozilla/5.0')