使用最新的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")
我该怎么做?
答案 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时成功。