Django REST POST和GET不同的节流范围

时间:2016-03-16 15:18:17

标签: django-rest-framework

我有django-rest视图类essai[i]和get和post方法,我希望允许用户在一分钟内制作一张POST照片上传一小时和1000张GET照片请求。默认情况下,我可以为所有Photo设置throttle_scope(获取和发布)。

如何表演?创建具有不同范围的两个不同视图?

感谢。

1 个答案:

答案 0 :(得分:8)

解决方案1:

它有点棘手,我没有测试过。

覆盖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()

解决方案2

您应该为不同的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_throttlesScopedRateThrottle