所以我有一个基于函数的 View ,我与 Django rest 框架一起使用,它看起来像这样:

from rest_framework.permissions import IsAuthenticated
from rest_framework.decorators import permission_classes

@api_view(['GET'])
@permission_classes((IsAuthenticated, ))
def example_view(request):
    .....
    <business logic>
    .....

这按预期工作,如果权限不足的用户尝试访问绑定(bind)到此 View 的 URL,则会提供 HTTP 401。但是,由于前端角度的设置方式,我需要的是显示 HTTP_403(禁止)。我浏览了 DRF 文档,但看不到任何可以用作装饰器的已定义权限类..实现这一点的最佳方法是什么?

最佳答案

所以我找到了一个解决方案。 IsAuthenticated 类有关于发出 401 与 403 的非常具体的规则,它们如下:



因此,为了强制 DRF 发出 403,始终只使用不使用 WWW-Authenticate header 的身份验证类。这就是我最终得到的结果:

from rest_framework.permissions import IsAuthenticated
from rest_framework.decorators import permission_classes
from rest_framework.decorators import authentication_classes
from rest_framework.authentication import SessionAuthentication, BasicAuthentication

@api_view(['GET'])
@authentication_classes((SessionAuthentication, BasicAuthentication))
@permission_classes((IsAuthenticated, ))
def example_view(request):
    .....
    <business logic>
    .....

关于python - django rest 框架中的 HTTP 403,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33739987/

10-13 00:54