慕田峪7331174
2021-08-05 16:31:37
我在 ListAPIView 中使用 get_queryset我想檢查用戶的訪問令牌,在提供列表之前,我完成了以下操作,但問題是 get_query 集不返回響應,有沒有辦法返回響應,或者我應該使用替代方法:這是我在 views.py 中的課程:class ListProductsOfCategory(generics.ListAPIView): serializer_class = ProductSerializer lookup_url_kwarg = 'category_id' def get_queryset(self): # I get the token here from the headers token = self.request.META.get("HTTP_TOKEN", "") if not token: return Response( data={ "message": "no token!" }, status=status.HTTP_400_BAD_REQUEST ) if not UserAccess.objects.filter(accessToken=token).exists(): return Response( data={ "message": "invalid token!" }, status=status.HTTP_400_BAD_REQUEST ) category_id = self.kwargs.get(self.lookup_url_kwarg) return Product.objects.filter(category_id=category_id)請注意,如果我刪除了與令牌相關的部分,則一切正常。提前致謝。上次更新后,這是回復:
2 回答

慕少森
TA貢獻2019條經驗 獲得超9個贊
如果我做對了,我不是 100%,但我相信您可以只使用 DRF 提供的常規身份驗證機制。在這個特定示例中,我認為 DRF 文檔的這一部分應該向您展示如何以“DRF”方式進行操作:設置身份驗證方案
如果您將TokenAuthentication方案添加到您的應用程序,您不需要在您的get_queryset方法中驗證令牌,但您可以只使用裝飾器來限制對基于函數的視圖或permission_classes基于類的視圖的訪問:
基于視圖
我想這是你最感興趣的。
class ListProductsOfCategory(generics.ListAPIView):
serializer_class = ProductSerializer
lookup_url_kwarg = 'category_id'
authentication_classes = (TokenAuthentication, ) # Add others if desired
permission_classes = (IsAuthenticated,)
基于路由
如果您只想限制對某些路線的訪問(例如,僅發布或詳細信息視圖),那么您可以編寫自己的權限類。
添加回答
舉報
0/150
提交
取消