如何解决Django Rest Framework中的AssertionError: .accepted_renderer未设置问题
解决AssertionError: .accepted_renderer not set on Response错误
问题出在getEmployees函数上——它没使用Django REST Framework(DRF)的@api_view装饰器。DRF的Response对象得靠API视图提供的上下文才能自动设置accepted_renderer,普通Django视图直接返回Response会缺失这个必要配置,进而触发错误。
修复方案
给getEmployees函数加上@api_view装饰器,按需添加@renderer_classes(如果需要指定渲染格式,也可以用DRF默认配置)。修改后的代码如下:
from rest_framework.response import Response from rest_framework.decorators import api_view, renderer_classes from rest_framework.renderers import JSONRenderer, TemplateHTMLRenderer from myapp.models import employees from .serializers import EmployeeSerializer @api_view(('GET',)) @renderer_classes((TemplateHTMLRenderer, JSONRenderer)) def getData(request): employees = {'name':'Bill', 'location':'Kolkata' } return Response(employees) @api_view(('GET',)) # 要是只需要返回JSON,可省略下面的装饰器用DRF默认配置;需要和getData一致的渲染格式就加上 @renderer_classes((JSONRenderer,)) def getEmployees(request): employee_list = employees.objects.all() serializer = EmployeeSerializer(employee_list, many = True) return Response(serializer.data)
补充说明
@api_view是DRF标记API视图的装饰器,会给视图添加必要的上下文处理逻辑,保证Response能正确初始化渲染器。- 若你的API仅需返回JSON格式,完全可以省略
@renderer_classes,DRF默认会使用JSONRenderer。
内容的提问来源于stack exchange,提问作者Aditya Bikram Arandhara
相关产品推荐
相关产品推荐

