Как выполнить согласование контента в промежуточном программном обеспечении django? - PullRequest
0 голосов
/ 20 июня 2019

Допустим, у меня есть пользовательский Django Middleware, который проверяет заголовок запроса и имеет токен jwt, если не возвращает rest_framework Response.,

middleware.py

@staticmethod
def process_view(request, view_func, view_args, view_kwargs):
    try:
        jwt_token = request.headers["token"]
    except KeyError:
        response = Response(status=status.HTTP_403_FORBIDDEN)
        return response

но я получаю ошибку как

.accepted_renderer не установлен в ответе

как выполнить согласование контента здесь?

1 Ответ

0 голосов
/ 20 июня 2019

Я думаю, вы использовали DRF Response класс .

Вы должны использовать Джанго HttpResponse класс as,

# middleware.py
<b>from django.http.response import HttpResponse</b>


@staticmethod
def process_view(request, view_func, view_args, view_kwargs):
    try:
        jwt_token = request.headers["token"]
    except KeyError:
        <b>response = HttpResponse(status=403)</b>
        return response


UPDATE-1

Я не уверен, что этот метод хорош или плохо , но это работает хорошо.

Создайте фиктивное представление, которое возвращает DRF Response, и используйте его для возврата ответа.

from rest_framework.response import Response
from rest_framework.decorators import api_view


<b>@api_view()
def custom_view(request):
    return Response(status=403)</b>


class Foo(...):

    @staticmethod
    def process_view(request, view_func, view_args, view_kwargs):
        try:
            jwt_token = request.headers["token"]
        except KeyError:
            <b>return custom_view(request)</b>
...