Как вернуть объект rest_framework.response из класса промежуточного ПО django?

Я пытаюсь написать класс промежуточного программного обеспечения, который гарантирует, что пользователь войдет в систему. Но проблема в том, что этот класс промежуточного программного обеспечения применим только к небольшому набору представлений, и эти представления возвращают объект DRF Response, а не объект HTTPResponse, и эти представления также украшаются с помощью api_view.

Поэтому, когда я пытаюсь вернуть объект Response из класса middleware, он вызывает эту ошибку.

 assert renderer, ".accepted_renderer not set on Response"
AssertionError: .accepted_renderer not set on Response

Я немного искал SO, и я предполагаю, что ошибка каким-то образом связана с api_view decorator. Но я смущен тем, как решить эту проблему.

Любая помощь приветствуется.:)

Ответы

Ответ 1

Недавно я столкнулся с этой проблемой. Это решение не использует ответ Django Rest Framework, но если ваш сервер просто возвращает JSON, это решение может сработать для вас.

Новое в django 1.7 является типом ответа JSONResponse.

https://docs.djangoproject.com/en/1.7/ref/request-response/#jsonresponse-objects

В промежуточном программном обеспечении вы можете вернуть эти ответы, не допуская ошибок "Нет принятых визуализаторов" и "Ответ не имеет атрибутов атрибутов".

Он очень похож на формат DRF Response

Импорт выглядит следующим образом: from django.http import JsonResponse

И как вы его используете:

return JsonResponse({'error': 'Some error'}, status=401)

Надеюсь, это поможет вам!