【问题标题】:Django : TokenAuthentication, setting permissions on endpointsDjango:TokenAuthentication,设置端点权限
【发布时间】:2016-01-28 11:51:07
【问题描述】:

我正在使用 Django Rest Framework 来构建我的 API,我对它还是很陌生。

我设置了一个 TokenAuthentication 方法,现在我正在尝试根据这个令牌过滤我的查询集的结果。

基本上,我有一个 GET 端点(比如说“/wallet”),我希望 /wallet 端点提供发送查询的特定用户的钱包。

我的方法是在 ViewSet 中重新定义 get_queryset 方法,但我不知道如何获取令牌以及如何过滤结果。

此外,不应允许任何匿名用户访问该端点。

这是我的 ViewSet,我想我需要在这里进行一些自定义:

class WalletViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows wallets to be viewed or edited.
    """
    queryset = Wallet.objects.filter()
    serializer_class = WalletSerializer

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    我的方法是在 ViewSet 中重新定义 get_queryset 方法,但我不知道如何获取令牌以及如何过滤结果。

    Django REST framework TokenAuthentication 链接到用户。因此,我建议您通过self.request.user 过滤应该在视图中可用的用户

    此外,不应允许任何匿名用户访问该端点。

    检查文档的权限部分。

    【讨论】:

      【解决方案2】:

      要只允许经过身份验证的用户访问您的视图集,只需这样做

      class WalletViewSet(viewsets.ModelViewSet):
          queryset = Wallet.objects.filter()
          serializer_class = WalletSerializer
          permission_classes = (IsAuthenticated,)
      

      要获取特定用户的钱包,您可以从request 获取用户,然后通过简单的模型查询获取它的钱包。最终结果是:

      class WalletViewSet(viewsets.ModelViewSet):
          """
          API endpoint that allows wallets to be viewed or edited.
          """
          queryset = Wallet.objects.filter()
          serializer_class = WalletSerializer
          permission_classes = (IsAuthenticated,)
      
          def retrieve(self, request, pk, format=None):
              wallet = Wallet.objects.get(user=request.user)
              Response(WalletSerializer(wallet))
      

      【讨论】:

        猜你喜欢
        • 2015-10-12
        • 1970-01-01
        • 2021-04-08
        • 1970-01-01
        • 2017-10-11
        • 1970-01-01
        • 2018-12-06
        • 2017-07-12
        • 1970-01-01
        相关资源
        最近更新 更多