微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Django 视图函数中动态定义渲染器类

如何解决在 Django 视图函数中动态定义渲染器类

如何根据某些条件在 Djanog 旧 api_view 函数中定义渲染器类?有这样的事情:

@api_view(['GET'])
def can_render_2_things(request):
    if some_comdition:
       renderer_classes = [PDFRenderer]
    else:
       renderer_classes = [JSONRenderer]

解决方法

在 Django docs 中,您可以使用不同的响应对象:

from django.http import FileResponse,JsonResponse
@api_view(['GET'])
def can_render_2_things(request):
    if some_comdition:
       response = FileResponse(open('myfile.png','rb'))
    else:
       response = JsonResponse({'foo': 'bar'},encoder=myJsonEncoder)
,

如果您要设置的 accepted_renderer 列表包含只有一个渲染器,您可以自己设置 accepted_media_type 上的属性 requestrenderer_classes班级。这将导致使用正确的渲染器:

@api_view(['GET'])
def can_render_2_things(request):
    if some_comdition:
       request.accepted_renderer = PDFRenderer
       request.accepted_media_type = PDFRenderer.media_type
    else:
       request.accepted_renderer = JSONRenderer
       request.accepted_media_type = JSONRenderer.media_type

但是如果你想设置更多渲染,这不是很有用,我建议你简单地使用基于类的视图而不是基于函数的视图并使用 APIView

from rest_framework.views import APIView


class CanRender2Things(APIView):
    def get(self,request,format=None):
        if some_comdition:
            self.renderer_classes = [PDFRenderer]
        else:
            self.renderer_classes = [JSONRenderer]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。