Django rest framework Django休息柱和不同的油门范围

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'

我有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'

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