Django:TokenAuthentication,在端点上设置权限

时间:2016-01-28 11:51:08

标签: python django django-rest-framework

我正在使用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

2 个答案:

答案 0 :(得分:1)

  

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

Django REST框架TokenAuthentication链接到用户。因此,我建议您通过self.request.user

过滤视图中应该可用的用户
  

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

检查文档的权限部分。

答案 1 :(得分:0)

要仅允许经过身份验证的用户访问您的视图集,请执行

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))