愚公系列2022年04月 Python教学课程 73-DRF框架之限流

网友投稿 471 2022-05-30

一、限流

限流类似于权限,因为它确定是否应对请求进行授权。限制指示临时状态,用于控制客户端可以向 API 发出的请求速率。

与权限一样,可以使用多个限制。您的 API 可能对未经身份验证的请求设置了限制性限制,对经过身份验证的请求的限制性限制较少。

您可能希望使用多个限制的另一种情况是,由于某些服务特别占用资源,因此您需要对 API 的不同部分施加不同的约束。

如果要同时施加突发节流速率和持续节流速率,也可以使用多个节流阀。例如,您可能希望将用户限制为每分钟最多 60 个请求,每天最多 1000 个请求。

限制不一定仅指速率限制请求。例如,存储服务可能还需要限制带宽,而付费数据服务可能希望限制正在访问的一定数量的记录。

REST 框架提供的应用程序级限制不应被视为安全措施或针对暴力破解或拒绝服务攻击的保护。故意的恶意行为者将始终能够欺骗 IP 源,应用程序级限制旨在实现策略,例如不同的业务层和防止服务过度使用的基本保护。

1.全局设置

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

2.视图设置

from rest_framework.response import Response from rest_framework.throttling import UserRateThrottle from rest_framework.views import APIView class ExampleView(APIView): throttle_classes = [UserRateThrottle] def get(self, request, format=None): content = { 'status': 'request was permitted' } return Response(content)

3.装饰器设置

【愚公系列】2022年04月 Python教学课程 73-DRF框架之限流

@api_view(['GET']) @throttle_classes([UserRateThrottle]) def example_view(request, format=None): content = { 'status': 'request was permitted' } return Response(content)

4.装饰器创建的路由设置限制类

@action(detail=True, methods=["post"], throttle_classes=[UserRateThrottle]) def example_adhoc_method(request, pk=None): content = { 'status': 'request was permitted' } return Response(content)

二、限流缓存

REST框架提供的限制类使用Django的缓存后端。您应确保已设置适当的缓存设置。后端的默认值应该适用于简单的设置。请参阅 Django 的缓存文档以获取更多详细信息。LocMemCache

如果需要使用 除 以外的高速缓存,可以通过创建自定义限制类并设置属性来执行此操作。例如:

from django.core.cache import caches class CustomAnonRateThrottle(AnonRateThrottle): cache = caches['alternate']

API

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:(openEuler21.03-x86)docker安装DM8数据库-DBeaver21.3连接
下一篇:【愚公系列】2022年02月 微信小程序-app.json配置属性之requiredBackgroundModes
相关文章