Django rest framework Django休息柱和不同的油门范围
我有django rest view类Photo和get和post方法,我希望允许用户一小时上传一张post Photo,一分钟内上传1000张get Photo请求。默认情况下,我可以为所有APIView设置范围,包括get和post 怎么做?创建具有不同范围的两个不同视图 谢谢。解决方案1: 这有点棘手,我没有测试 在APIView中重写get_throttles方法Django rest framework Django休息柱和不同的油门范围,django-rest-framework,Django Rest Framework,我有django rest view类Photo和get和post方法,我希望允许用户一小时上传一张post Photo,一分钟内上传1000张get Photo请求。默认情况下,我可以为所有APIView设置范围,包括get和post 怎么做?创建具有不同范围的两个不同视图 谢谢。解决方案1: 这有点棘手,我没有测试 在APIView中重写get_throttles方法 class PhotoView(APIView): throttle_scope = 'default_scope'
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()
解决方案2
您应该为不同的scope\u attr定义自己的ScopedRateThrottle类
仅供参考。相关源代码:和
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()