【问题标题】:Django - test client receives 403 because of csrfDjango - 测试客户端因为 csrf 而收到 403
【发布时间】:2014-03-17 02:56:39
【问题描述】:

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

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

【问题讨论】:

    标签: python django testing csrf django-testing


    【解决方案1】:

    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')

    【讨论】:

    • 非常感谢,真的救了我!
    猜你喜欢
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    • 2023-03-07
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    相关资源
    最近更新 更多