您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何在Django Rest Framework(DRF)中覆盖Response类?

如何在Django Rest Framework(DRF)中覆盖Response类?

解决此问题,DRF提出的最佳实践是使用“渲染器”类。渲染器操纵并返回结构化响应。

Django使用诸如TemplateRenderer和DRF之类的渲染器受益于此功能并提供API渲染器

为此,您可以在包中提供这样的渲染器(例如app_name.renderers.ApiRenderer):

from rest_framework.renderers import BaseRenderer
from rest_framework.utils import json


class ApiRenderer(BaseRenderer):

    def render(self, data, accepted_media_type=None, renderer_context=None):
        response_dict = {
            'status': 'failure',
            'data': {},
            'message': '',
        }
        if data.get('data'):
            response_dict['data'] = data.get('data')
        if data.get('status'):
            response_dict['status'] = data.get('status')
        if data.get('message'):
            response_dict['message'] = data.get('message')
        data = response_dict
        return json.dumps(data)

然后在您的设置文件中:

REST_FRAMEWORK = {
    ...
    'DEFAULT_RENDERER_CLASSES': (
        'app_name.renderers.ApiRenderer',
    ),
    ...
}

通过此操作,所有扩展DRF通用视图的视图都将使用渲染器。如果需要覆盖设置,则可以将renderer_classes属性用于通用视图类,将@renderer_classes装饰器用于api视图功能

可以使用全面的渲染器类进行覆盖<virtualenv_dir>/lib/python3.6/site-packages/rest_framework/renderers.py

Go 2022/1/1 18:39:16 有327人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶