我有django-rest视图类essai[i]
和get和post方法,我希望允许用户在一分钟内制作一张POST照片上传一小时和1000张GET照片请求。默认情况下,我可以为所有Photo
设置throttle_scope
(获取和发布)。
如何表演?创建具有不同范围的两个不同视图?
感谢。
答案 0 :(得分:8)
覆盖APIView中的get_throttles
方法。
class PhotoView(APIView):
throttle_scope = 'default_scope'
def get_throttles(self):
if self.request.method.lower() == 'get':
self.throttle_scope = 'get_scope'
elif self.request.method.lower() == 'post':
self.throttle_scope = 'post_scope'
return super(PhotoView, self).get_throttles()
您应该为不同的ScopedRateThrottle
定义自己的scope_attr
课程。
class FooScopedRateThrottle(ScopedRateThrottle):
scope_attr = 'foo_throttle_scope'
class BarScopedRateThrottle(ScopedRateThrottle):
scope_attr = 'bar_throttle_scope'
class PhotoView(APIView):
foo_throttle_scope = 'scope_get'
bar_throttle_scope = 'scope_post'
def get_throttles(self):
ret = []
if self.request.method.lower() == 'get':
return [FooScopedRateThrottle(), ]
elif self.request.method.lower() == 'post':
return [BarScopedRateThrottle(), ]
else:
return super(PhotoView, self).get_throttles()
FYI。相关的源代码:get_throttles和ScopedRateThrottle