1

假设我有一个自定义Django Middleware,如果不返回 rest_framework,则检查请求标头具有 jwt 令牌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 未在响应上设置

如何在这里执行内容协商?

4

1 回答 1

1

我认为您使用的是DRF 的Responseclass

你应该使用Django 的HttpResponse

# middleware.py
from django.http.response import HttpResponse


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


更新-1

我不确定这种方法是是坏,但效果很好。

创建一个虚拟视图,该视图返回DRF Response并使用它来返回响应。

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


@api_view()
def custom_view(request):
    return Response(status=403)


class Foo(...):

    @staticmethod
    def process_view(request, view_func, view_args, view_kwargs):
        try:
            jwt_token = request.headers["token"]
        except KeyError:
            return custom_view(request)
于 2019-06-20T05:21:41.647 回答