Python 我可以使用DRF覆盖ApiView中单个请求类型的全局身份验证吗?
我正在一个大型项目中使用django_rest_框架(DRF)。通常,我希望所有视图都受到保护,因此我将令牌身份验证设置为全局身份验证方案。但有几个视图我希望关闭它,例如,创建新用户和登录 例如,myPython 我可以使用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中,其中一个经过身份验证,另
/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类时,您将覆盖它。但它同样不会覆盖身份验证类。请检查文档的身份验证部分:希望它能更清楚地区分身份验证类和权限类。