在 django 测试客户端中访问 raw_post_data

Posted

技术标签:

【中文标题】在 django 测试客户端中访问 raw_post_data【英文标题】:Access raw_post_data in django test client 【发布时间】:2011-12-14 16:29:12 【问题描述】:

标题几乎说明了一切:我在几个视图中使用 raw_post_data,因此我需要测试客户端正确授予对它的访问权限。

我已经从模拟请求中复制了 raw_post_data 字符串,将其传递给 json.loads(),然后使用生成的 dict 作为测试客户端的 POST 数据。然后,我将内容类型设置为“application/json”——这会导致 raw_post_data 出现,但它与模拟请求的 raw_post_data 不同。

【问题讨论】:

您能否发布出现的数据(差异)和您希望看到的请求? 【参考方案1】:

只需按照以下步骤操作: 1. 将数据属性设置为您的字符串。 2. 然后将 content_type 属性设置为 application/octet-stream

    payload = 'k1':'v1'
    data = json.dumps(payload)
    response = self.client.post(url, data=data, content_type='application/octet-stream', **self.auth_headers)

【讨论】:

这很有魅力。参考:docs.djangoproject.com/en/1.9/_modules/django/test/client【参考方案2】:

当您在测试客户端更改内容类型时,数据参数不再被解析为字典,而是直接发送。尝试将您的 JSON 字符串直接作为数据参数复制到您的发布请求中,您应该在应用程序的 raw_post_data 中收到它。

【讨论】:

以上是关于在 django 测试客户端中访问 raw_post_data的主要内容,如果未能解决你的问题,请参考以下文章

在测试Django时访问request.user对象

AJAX 可以访问 Django HttpResponse 变量

使用Django 测试客户端一起测试视图,模板和URL

如何在 Django 测试客户端中保持 POST 参数的顺序?

访问中间件值以测试Django DetailView

在 docker 中使用 selenium 运行 django 测试