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

Python 我可以使用DRF覆盖ApiView中单个请求类型的全局身份验证吗?,python,django,authentication,django-rest-framework,Python,Django,Authentication,Django Rest Framework,我正在一个大型项目中使用django_rest_框架(DRF)。通常,我希望所有视图都受到保护,因此我将令牌身份验证设置为全局身份验证方案。但有几个视图我希望关闭它,例如,创建新用户和登录 例如,my/UserApiView有一个get和post方法。get返回用户配置文件,post创建新用户。如何仅在/Userpost上覆盖全局身份验证方案?我仍然需要在获取用户信息时打开它 我要求更多的是提高我对DRF的理解。我知道我可以将/User/调用分离到不同的APIview中,其中一个经过身份验证,另

我正在一个大型项目中使用django_rest_框架(DRF)。通常,我希望所有视图都受到保护,因此我将令牌身份验证设置为全局身份验证方案。但有几个视图我希望关闭它,例如,创建新用户和登录

例如,my
/User
ApiView有一个
get
post
方法。
get
返回用户配置文件,
post
创建新用户。如何仅在
/User
post
上覆盖全局身份验证方案?我仍然需要在获取用户信息时打开它

我要求更多的是提高我对DRF的理解。我知道我可以将
/User/
调用分离到不同的APIview中,其中一个经过身份验证,另一个未经身份验证。我还知道,我可以完全放弃全局方案,并在预查看的基础上进行身份验证

有没有一种特别“pythonic”或django的典型方式来做到这一点?有什么建议吗?

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

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]
您可以编写自定义,并在某些视图中使用它。例如:

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]

谢谢,看起来很完美。如果启用了全局身份验证方案,然后将其添加到某个特定视图中,则特定视图的身份验证类会覆盖全局身份验证,还是请求必须由两个身份验证类进行身份验证?@Brian permission实际上不是身份验证。这有点不同,不会改变身份验证过程。您可以将其视为一个附加层,帮助您自定义对特定视图或对象的访问。请注意,默认权限类中没有DRF。当您在视图级别定义
权限\u类时,您将覆盖它。但它同样不会覆盖身份验证类。请检查文档的身份验证部分:希望它能更清楚地区分身份验证类和权限类。谢谢,看起来很完美。如果启用了全局身份验证方案,然后将其添加到某个特定视图中,则特定视图的身份验证类会覆盖全局身份验证,还是请求必须由两个身份验证类进行身份验证?@Brian permission实际上不是身份验证。这有点不同,不会改变身份验证过程。您可以将其视为一个附加层,帮助您自定义对特定视图或对象的访问。请注意,默认权限类中没有DRF。当您在视图级别定义
权限\u类时,您将覆盖它。但它同样不会覆盖身份验证类。请检查文档的身份验证部分:希望它能更清楚地区分身份验证类和权限类。