在Django REST框架中的ModelViewSet中对不同的操作使用不同的身份验证

时间:2014-03-05 11:40:31

标签: django django-rest-framework

我有以下ModelViewSet

class UserViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows users to be viewed or edited.
    """
    queryset = User.objects.all()
    serializer_class = UserSerializer
    authentication_classes = (TokenAuthentication,)
    permission_classes = (permissions.IsAuthenticated, MyUserPermissions)

我希望create method (POST on /users/)不要求任何身份验证。在这种情况下,如何覆盖authentication_classes?我在谈论ModelViewSet非通用API视图。

1 个答案:

答案 0 :(得分:7)

  

我希望create方法(POST / users /上的POST)不要求任何身份验证。

实际上这并不是你想要的。您希望用户POST不需要任何权限,这将导致经过身份验证或未经身份验证的请求成功。

我建议覆盖您的权限类,以便它们始终允许POST个请求。有关详细信息,请点击custom permissions documentation

基本上你会有类似的东西:

class IsAuthenticatedOrCreate(permissions.IsAuthenticated):
    def has_permission(self, request, view):
        if request.method == 'POST':
            return True
        return super(IsAuthenticatedOrCreate, self).has_permission(request, view)

也可能类似于你的其他权限类别。