【问题标题】:django graphene rate limit (throttling)django 石墨烯速率限制(节流)
【发布时间】:2020-08-02 03:52:44
【问题描述】:

我正在 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 的 Graphene django。

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

【问题讨论】:

    标签: throttling rate-limiting graphene-django


    【解决方案1】:

    通过将 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
    

    【讨论】:

    • 你试过运行这段代码吗?它引发了 9 个not defined 错误。
    猜你喜欢
    • 2018-01-11
    • 2020-09-01
    • 2019-12-20
    • 2021-09-25
    • 2020-09-05
    • 2017-08-20
    • 2020-09-03
    • 2019-01-19
    • 2018-01-29
    相关资源
    最近更新 更多