Django:一个端点,POST对所有人开放,GET需要身份验证

时间:2017-05-08 23:13:12

标签: django django-rest-framework

使用最新的Django / Django Rest Framwork。

我无法弄清楚如何允许一个端点具有以下规则:

POST - 对任何人开放(AllowAny权限) GET - 经过身份验证。

根据方法无法获得条件权限,因此只有一种方法可以在每个视图上更改权限,如下所示:

@api_view(['POST'])
@permission_classes([AllowAny])
def users_view(request):
    return Response("Okay!") 

当然没有办法做这样的事情:

# I have authentication turned on by default in my settings.py file 

@api_view(['GET'])
def users_view(request):
    return Response("Okay - you're authenticated")


@api_view(['POST'])
@permission_classes([AllowAny])
def users_view(request):
    return Response("Okay! this is a public endpoint")

我该怎么做?

1 个答案:

答案 0 :(得分:0)

所以我最终做了这样的事情:

class AllowPostOnlyPermission(BasePermission):
    """
    The request is permitted only if the method is POST
    """

    def has_permission(self, request, view):
        if (request.method == 'POST' or
                request.user and request.user.is_authenticated()):
                return True
        return False

我只是添加了这个:

@api_view(['POST', 'GET'])
@permission_classes([AllowPostOnlyPermission])
def users_view(request):
    if request.method == 'GET':
        return Response("Okay GET")
        pass
    elif request.method == 'POST':
        return Response("Okay POST")

现在我的非凭证请求在GET上失败,但在POST时成功。