【问题标题】:Django rest_framework, disable authentication and permission in specific methodDjango rest_framework,在特定方法中禁用身份验证和权限
【发布时间】:2018-12-06 19:39:59
【问题描述】:

我有一个班级叫UserViewSet

class UserViewSet(viewsets.ModelViewSet):
    queryset = UserData.objects.all()
    serializer_class = UserSerializer
    from rest_framework.permissions import IsAuthenticated
    from rest_framework.authentication import TokenAuthentication
    permission_classes = (IsAuthenticated,)
    authentication_classes = (TokenAuthentication,)

    @action(methods=['post'], detail=False)
    def signup_user(self, request):
        request_data = request.query_params
        if len(request_data) == 0:
            return Response("Empty params !")

现在我想注册一个新用户,它会引发这个错误:

{ "detail": "未提供身份验证凭据。" }

这是因为 AuthenticationPermission 类。

那么在signup 函数中禁用这些类的正确方法是什么?

我使用了authentication_classespermission_classes 装饰器,但对这个功能没有影响。

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    action 装饰器允许指定特定于操作的权限类。应该这样做:

        @action(methods=['post'], detail=False, permission_classes=[AllowAny])
        def signup_user(self, request):
            # ...
    

    (别忘了导入AllowAny

    【讨论】:

    • 谢谢,它解决了这个问题。 permission_classes 可以是一个空列表而不是 AllowAny 吗?
    • 可以。空列表与[AllowAny] 的含义相同。我喜欢[AllowAny],因为它使意图更清晰([] 可能看起来您忘记了权限名称;不熟悉 DRF 的人如果不查看文档就不会知道默认策略……)。
    猜你喜欢
    • 2012-12-02
    • 1970-01-01
    • 2021-03-10
    • 2014-01-11
    • 1970-01-01
    • 2020-02-25
    • 1970-01-01
    • 2020-06-25
    • 2014-11-13
    相关资源
    最近更新 更多