Прежде всего: если вы используете в качестве аутентификационного класса что-то отличное от rest_framework.authentication.SessionAuthentication
, тогда request.user
устанавливается вне промежуточного программного обеспечения (где-то во время View.dispatch
)
Если вы уверены, что запрос.Пользователь всегда соответствует request.user
в представлениях rest_framework и просто хочет вернуть ответ:
A.Посмотрите на APIView.finalize_response
: это относительно «сложно», потому что он может использовать разные средства визуализации (в зависимости от заголовка запроса accept-content), он может менять заголовки.Если вы можете получить доступ к экземпляру своего представления в промежуточном программном обеспечении, тогда вы можете позвонить view.finalize_response(request, response)
, если у вас его нет, вы можете попробовать выполнить rest_framework.views.APIView().finalize_response(...)
B.Вы можете использовать django.http.HttpResponse
: вручную сгенерировать строку для тела и указать соответствующую content_type
.И django.http.JsonResponse
тоже может пригодиться.
C.Я предположил, что вместо return Response(request)
вы действительно делаете что-то еще (например, Response(data=...)
).Если вам просто нужно вернуть результаты из представления, затем удалите return Response(request)
, чтобы return self.get_response(request)
активировалось. Но вы выходите из системы, поэтому, возможно, вам следует вернуть какой-то экземпляр django.http.HttpResponseRedirect