我有一个端点,x,它像魅力一样吐出json。可以将相同的资源生成到二进制变体中。X的端点是由视图集制成的,X的二进制版本在动作范围的帮助下具有自己的终点。
class XViewSet(ReadOnlyModelViewSet):
queryset = X.objects.all()
serializer_class = XSerializer
@action(detail=True, methods=['get'])
def binary(self, request, pk=None):
x = self.get_object()
binx = x.get_binary(FORMAT)
..
显然,binary
永远不会吐出JSON。我如何获得协商的格式,以及如何告诉Django-Rest-Framework关于binary
支持的二进制格式?
您不应该从 ViewSet
返回二进制数据,但要有一个自定义渲染器将其转换为:
from rest_framework.renderers import BaseRenderer, JSONRenderer
class BinaryRenderer(BaseRenderer):
media_type = 'application/octet-stream'
format = 'bin'
render_style = 'binary'
charset = None
def render(self, data, media_type=None, renderer_context=None):
# Either use `data` or access the view via
# the `renderer_context`
view = renderer_context['view']
return view.get_object().get_binary()
class XViewSet(ReadOnlyModelViewSet):
queryset = X.objects.all()
serializer_class = XSerializer
renderer_classes = (JSONRenderer, BinaryRenderer)
查看有关如何确定渲染器的文档。