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