我在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中执行此操作?
答案 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的一个分支,如果有人需要它,就可以做到这一点。