包含Django FileUpload的Content-disposition标头

mar*_*che 5 python django unit-testing content-disposition python-requests

我定义了一个接受文件的API端点(例如使用Django REST Framework).在Django中,可以在检查响应时使用内容处置标头.

https://docs.djangoproject.com/en/1.11/ref/request-response/#telling-the-browser-to-treat-the-response-as-a-file-attachment

现在,如果我们想在测试端点时设置标头,如何使用REST-Framework的APITestCase包含此标头?

我到目前为止尝试的是,但它似乎不接受标题.

class TestSaleViews(APITestCase):
    def test_sale_detail_view(self):
        f = create_named_temporary_file()
        files = {'archive': f}
        basename = os.path.basename(f.name)
        headers = {
            'content-disposition': 'attachment; filename={}'.format(basename),
        }
        response = self.client.post(url, files, format='multipart', **headers)
Run Code Online (Sandbox Code Playgroud)

mar*_*che 13

找到答案了!

Django在其FileUploadParser中有一个固定的关键字.它是:HTTP_CONTENT_DISPOSITION

所以我需要更换它等瞧:工作!

headers = {
  'HTTP_CONTENT_DISPOSITION': 'attachment; filename={}'.format(basename),
}
Run Code Online (Sandbox Code Playgroud)

https://github.com/encode/django-rest-framework/blob/master/rest_framework/parsers.py#L206