Как устранить AssertionError: .accepted_renderer not set on Response в Django Rest Framwork
В то время как я вызываю Django url, я получаю ошибку:
AssertionError: .accepted_renderer not set on Response.
Мой код:
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)
def getEmployees(request):
employee_list = employees.objects.all()
serializer = EmployeeSerializer(employee_list, many = True)
return Response(serializer.data)
Эта ошибка обычно указывает на то, что вы пытаетесь вернуть ответ из вашего представления Django, который не был обработан рендерером. В Django рендереры используются для преобразования данных в ответе в формат, который может быть возвращен клиенту, например, JSON или XML.
Чтобы исправить эту ошибку, необходимо указать рендерер для ответа. Вы можете сделать это, установив атрибут .accepted_renderer на объекте ответа, или используя декоратор @api_view и указав рендерер в аргументе renderer_classes.
Вот пример того, как использовать декоратор @api_view для указания рендерера для представления Django:
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework.renderers import JSONRenderer
@api_view(["GET"], renderer_classes=[JSONRenderer])
def my_view(request):
data = {"hello": "world"}
return Response(data)
В этом примере декоратор @api_view используется для указания того, что представление должно принимать только GET-запросы, а ответ должен быть отрисован с помощью класса JSONRenderer. Это гарантирует, что ответ будет правильно отформатирован, прежде чем он будет возвращен клиенту.
[На этот вопрос ответил OpenAPI]
Между декораторами @api_view
не должно быть пробелов, а представления getData
и getEmployee
должны иметь свои отдельные декораторы
@api_view(('GET',))
@renderer_classes((TemplateHTMLRenderer, JSONRenderer))
def getData(request):
employees = {'name':'Bill', 'location':'Kolkata' }
return Response(employees)
@api_view(('GET',))
@renderer_classes((TemplateHTMLRenderer, JSONRenderer))
def getEmployees(request):
employee_list = employees.objects.all()
serializer = EmployeeSerializer(employee_list, many = True)
return Response(serializer.data)