rest

mac2022-06-30  232

view–指定评率类 throttle_classes = (UserRateThrottle, AnonRateThrottle)# 用户访问权限 # UserRateThrottle 用户登入访问权限 # AnonRateThrottle 用户未登入访问权限 from rest_framework.throttling import UserRateThrottle, AnonRateThrottle class GoodsListViewSet(CacheResponseMixin, mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet): """ 商品列表页, 分页, 搜索, 过滤, 排序 """ # 访问次数权限 throttle_classes = (UserRateThrottle, AnonRateThrottle) # 指定queryset queryset = Goods.objects.all() # 指定序列化类 serializer_class = GoodsSerializer # 指定分页类 pagination_class = GoodsPagination # 指定认证类 # authentication_classes = [TokenAuthentication, ] # 添加过滤器 这里可以吧django-filter过滤器添加进来 和 rest_framework的filters添加进来一起用, 也可以单个用, 看你的需求 filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter] # 只需要简单的基于等同的过滤,则可以filter_fields在视图或视图集上设置属性,列出要过滤的字段集。 # 等同就是根据你过滤的字段的数据必须跟数据库里那个字段的数据相同 # filter_fields = ['name', 'shop_price'] # 指定过滤器类 filter_class = GoodsFilter # 指定搜索的字段 search_fields = ['name', 'goods_brief', "goods_desc"] # 指定排序的字段 ordering_fields = ["sold_num", "shop_price"] def retrieve(self, request, *args, **kwargs): # 重写retrieve, 更新商品的点击数 instance = self.get_object() instance.click_num += 1 instance.save() serializer = self.get_serializer(instance) return Response(serializer.data) settings# 全局权限认证 # 设置全局默认认证 REST_FRAMEWORK = { # 限速类 'DEFAULT_THROTTLE_CLASSES': [ # 用户没有登入的情况下 AnonRateThrottle通过ip地址来判断的 'rest_framework.throttling.AnonRateThrottle', # 用户登入的情况下 UserRateThrottle通过token, session来判断的 'rest_framework.throttling.UserRateThrottle' ], # 限速规则 'DEFAULT_THROTTLE_RATES': { # 匿名用户 最多一分钟访问60次 'anon': '60/minute', # 登入用户 最多一分钟访问60次 'user': '60/minute' } } 效果图 官方 官方文档:https://www.django-rest-framework.org/api-guide/throttling/

最新回复(0)