Django中的身份验证基于框架功能的视图

时间:2015-11-16 08:19:42

标签: python function django-rest-framework

所以我在我的Django休息框架中有一个基于函数的视图,我在其中进行身份验证,如下所示:

from rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response

@api_view(['GET'])
def analytics_filter_values(request):
    if request.user.is_authenticated():
        pass
    else:
        return Response("Unauthorized access", status=status.HTTP_403_FORBIDDEN)
.....
<business logic>
.....
.....

现在在这个视图文件中,我有很多视图,在每个函数里面,我使用if else来检查身份验证。所以为了减少代码行,我决定让这个函数然后调用它在每个函数视图中如下:

from rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response

def check_authentication(request):
if request.user.is_authenticated():
    pass
else:
    return Response("Unauthorized access", status=status.HTTP_403_FORBIDDEN)

@api_view(['GET'])
def analytics_filter_values(request):
    check_authentication(request)
.....
<business logic>
.....
.....

然而,这不起作用。这可能真的很傻但我对这里的错误一无所知..

1 个答案:

答案 0 :(得分:7)

您必须使用django restframework @permission_classes装饰器来检查用户是否经过身份验证。

你可以这样做:

from rest_framework.permissions import IsAuthenticated
from rest_framework.decorators import permission_classes

@api_view(['GET'])
@permission_classes((IsAuthenticated, ))
def example_view(request, format=None):
    .....
    <business logic>
    .....

此处@permission_classes((IsAuthenticated, ))装饰器将在将请求转发给您的视图之前检查用户是否已通过身份验证。

您可以了解更多here