Django石墨烯速率限制(节流)

时间:2020-04-19 17:49:30

标签: throttling rate-limiting graphene-django

我正在Django RF上构建REST Api。我需要从IP设置请求限制。对于views.py中的常规Api端点,只需添加以下设置即可轻松实现

REST_FRAMEWORK = {
    'DEFAULT_THROTTLE_CLASSES': [
        'rest_framework.throttling.AnonRateThrottle',
        'rest_framework.throttling.UserRateThrottle'
    ],
    'DEFAULT_THROTTLE_RATES': {
        'anon': '100/day',
        'user': '1000/day'
    }
}

但是我也有一个graphql api的石墨烯django。

如何为该视图设置速率限制?我已经尝试过django-ratelimit,但是对我来说不起作用。

1 个答案:

答案 0 :(得分:0)

通过将GraphQL视图定制为以下内容解决了该问题:

from graphene_django.views import GraphQLView


class CustomGraphQL(GraphQLView):
    def parse_body(self, request):
        if isinstance(request, Request):
            return request.data
        return super().parse_body(request)

    @classmethod
    def as_view(cls, *args, **kwargs):
        view = super().as_view(*args, **kwargs)
        view = authentication_classes((TokenAuthentication,))(view)
        view = throttle_classes((AnonRateThrottle, AnonMinutesThrottle,
                                 AnonSecondsThrottle, UserRateThrottle))(view)
        view = api_view(['GET', 'POST'])(view)
        return view