我在一个大型项目上使用django_rest_frameork(DRF)。通常,我希望所有视图都受到保护,因此我将令牌认证设置为我的全局认证方案。但是,我希望关闭一些视图,例如,创建一个新用户并登录。
例如,我的/User
ApiView有一个get
和post
方法。 get
返回用户个人资料,post
创建一个新用户。如何仅在/User
post
上覆盖全局认证方案?获取用户信息时,我仍然需要将其打开。
我要提出的更多要求是要增加对DRF的理解。我知道我可以将/User/
调用分成对不同的ApiView的调用,其中一个通过身份验证,而另一个未通过身份验证。我也知道,我可以完全放弃这种全球方案,并在预览的基础上进行认证。
是否有一种特别的“ pythonic”或Django典型方法?有什么建议吗?
答案 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]