我可以使用DRF覆盖ApiView中单个请求类型的全局身份验证吗?

时间:2020-02-03 16:09:55

标签: python django authentication django-rest-framework

我在一个大型项目上使用django_rest_frameork(DRF)。通常,我希望所有视图都受到保护,因此我将令牌认证设置为我的全局认证方案。但是,我希望关闭一些视图,例如,创建一个新用户并登录。

例如,我的/User ApiView有一个getpost方法。 get返回用户个人资料,post创建一个新用户。如何仅在/User post上覆盖全局认证方案?获取用户信息时,我仍然需要将其打开。

我要提出的更多要求是要增加对DRF的理解。我知道我可以将/User/调用分成对不同的ApiView的调用,其中一个通过身份验证,而另一个未通过身份验证。我也知道,我可以完全放弃这种全球方案,并在预览的基础上进行认证。

是否有一种特别的“ pythonic”或Django典型方法?有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您可以编写自定义permission class并在某些视图中使用它。例如:

from rest_framework.permissions import BasePermission

class AllowPostAny((BasePermission):
    def has_permission(self, request, view):
        if request.method == "POST":
            return True
        return bool(request.user and request.user.is_authenticated)  

您现在可以在视图中使用此权限:

class ExampleView(APIView):
    permission_classes = [AllowPostAny]