@permission_classes((AllowAny, ))
class Viewset(viewsets.ViewSet):
renderer_classes = (JSONRenderer, )
def list(self, request, *args, **kwargs):
return Response()
Действительный текст ответа json, например null
или {}
Заголовок Content-Type
установлен, и возвращается пустой ответ, что особенно болезненно при выполнении запросов с помощью jquery ajax()
. Он выдает ошибку синтаксического анализа и отклоняет обещание об успешном ответе с пустым телом. Смотрите здесь https://stackoverflow.com/a/6186905
Пиар здесь: https://github.com/encode/django-rest-framework/pull/6027
Просто быстрое уточнение. Возможно, я не воссоздаю вашу точную настройку, но быстрый ручной тест показывает, что заголовок Content-Type
правильно установлен на application/json
.
Что касается пустого ответа, я склонен согласиться с @kltdwrds. Я не знаю , если спецификация позволяет пустое тело, однако, как JavaScript - х JSON.parse
и Питона json.loads
не декодировать пустую строку.
То есть data=None
следует кодировать как null
.
Если подумать, текущее поведение имеет смысл. Хотя JSON.parse
и json.loads
действительно терпят неудачу, клиент обязан проверить тип содержимого перед синтаксическим анализом. Во всяком случае, это ошибка в jQuery.
хм, я использую
from rest_framework import viewsets
from rest_framework.renderers import JSONRenderer
from rest_framework.response import Response
Не уверен, где устанавливается заголовок Content-Type
, но я только что подтвердил, что он отсутствует в ответах, используя приведенный выше пример.
Похоже, что заголовок Content-Type
удален в пустом ответе рендерера (строка 80).
https://github.com/encode/django-rest-framework/blob/master/rest_framework/response.py#L72
Наше текущее поведение для return Response()
является преднамеренным. Хотя возвращение null
также допустимо, более типичным является то, что нам нужен способ вернуть пустой ответ без типа содержимого. Я, наверное, лучше пока оставлю все как есть.
Самый полезный комментарий
Похоже, что заголовок
Content-Type
удален в пустом ответе рендерера (строка 80).https://github.com/encode/django-rest-framework/blob/master/rest_framework/response.py#L72