django rest框架渲染器中的多部分边界

时间:2016-02-15 14:55:26

标签: python django rest django-rest-framework

我在Django Rest Framework中编写了一个自定义渲染器来编写一个Multipart Mixed响应。它们具有分隔响应的所有部分的边界。此边界必须出现在“内容类型”标题中。

我无法看到在渲染器创建为渲染器后,将自定义边界注入渲染器实例的最佳方式,Accept标头和媒体类型似乎紧密相关。

我希望我的渲染器能够创建这种类型的响应:

----boundary-65d4d397-cf77-41c2-a88d-3ef52e806032
Content-Type: application/json

[{"some": "json"}]
----boundary-65d4d397-cf77-41c2-a88d-3ef52e806032
Content-Type: text/plain

This is some text.

----boundary-65d4d397-cf77-41c2-a88d-3ef52e806032--
带标题的

Content-Type: multipart/mixed; boundary=----boundary-65d4d397-cf77-41c2-a88d-3ef52e806032

如何在Django Rest Framework中执行此操作?

1 个答案:

答案 0 :(得分:0)

我设法通过向我的自定义渲染器添加“boundary”属性并修补DRF的response.py来使用它。

在response.py中,我在渲染后删除了现有的内容类型检测代码,以允许渲染器在运行时生成边界(允许在每个边界中使用随机字符串)。这是response.py。

的新内容类型检测代码
boundary = renderer.boundary if hasattr(renderer, "boundary") else None
if not content_type:
    content_type = "{0}".format(media_type)
    if charset is not None:
        content_type += "; charset={0}".format(charset)
    if boundary is not None:
        content_type += "; boundary={0}".format(boundary)
self['Content-Type'] = content_type

我现在正在维护Django Rest Framework的一个分支,如果有人需要它,就可以做到这一点。

https://github.com/st8st8/django-rest-framework