Django 限制用户访问频率的中间件的实现
作者:rayzz 时间:2023-12-17 20:19:19
一、定义限制访问频率的中间件
common/middleware.py
import time
from django.utils.deprecation import MiddlewareMixin
MAX_REQUEST_PER_SECOND=2 #每秒访问次数
class RequestBlockingMiddleware(MiddlewareMixin):
def process_request(self,request):
now=time.time()
request_queue = request.session.get('request_queue',[])
if len(request_queue) < MAX_REQUEST_PER_SECOND:
request_queue.append(now)
request.session['request_queue']=request_queue
else:
time0=request_queue[0]
if (now-time0)<1:
time.sleep(5)
request_queue.append(time.time())
request.session['request_queue']=request_queue[1:]
二、将中间件加入配置文件
setting.py
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'common.middleware.RequestBlockingMiddleware', #在sessions之后,auth之前
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
对使用 rest_framework 框架的项目来说,可以使用框架的设置来对api的访问频率进行限制
REST_FRAMEWORK = {
'DEFAULT_PARSER_CLASSES': (
'rest_framework.parsers.JSONParser',
'rest_framework.parsers.FormParser',
'rest_framework.parsers.MultiPartParser',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
# 'lecare.core.rest_auth.CrossSiteSessionAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': [
# 'rest_framework.permissions.IsAuthenticated',
'rest_framework.permissions.AllowAny',
],
'PAGE_SIZE': 20,
'UNICODE_JSON': False,
# 'COERCE_DECIMAL_TO_STRING': False,
# 'EXCEPTION_HANDLER': 'lecare.core.custom_exception_handler.custom_exception_handler',
'JWT_EXPIRATION_DELTA': datetime.timedelta(hours = 2),
'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days = 360),
'JWT_ALLOW_REFRESH': False,
'JWT_AUTH_HEADER_PREFIX': 'JWT',
'JWT_PAYLOAD_HANDLER': 'consumer.jwt_conf.jwt_payload_handler',
'JWT_RESPONSE_PAYLOAD_HANDLER': 'consumer.jwt_conf.jwt_response_payload_handler',
'JWT_GET_USER_SECRET_KEY': 'consumer.jwt_conf.jwt_get_secret_key',
# 'DEFAULT_THROTTLE_CLASSES': (
# # 开启匿名用户接口请求频率限制
# 'rest_framework.throttling.AnonRateThrottle',
# # 开启授权用户接口请求频率限制
# 'rest_framework.throttling.UserRateThrottle'
# ),
# 'DEFAULT_THROTTLE_RATES': {
# # 频率限制有second, minute, hour, day
# # 匿名用户请求频率
# 'anon': '30/second',
# # 授权用户请求频率
# 'user': '30/second'
# }
}
来源:https://segmentfault.com/a/1190000016114237
标签:Django,访问,频率,限制
0
投稿
猜你喜欢
MySQL分区表的最佳实践指南
2024-01-27 14:45:40
在 Python 中使用 MQTT的方法
2022-01-26 12:32:48
Python Matplotlib绘图基础详细教程
2024-01-16 04:34:41
Django CBV类的用法详解
2022-11-24 20:33:43
FrontPage2002简明教程八:站点的管理
2008-09-17 11:36:00
Python 处理表格进行成绩排序的操作代码
2022-08-25 02:49:36
django使用haystack调用Elasticsearch实现索引搜索
2021-07-22 17:13:27
python 类详解及简单实例
2023-05-17 17:17:32
javascript 常见汉字转换成拼音工具
2008-03-03 16:54:00
二级域名的解析指向ASP源码
2007-10-19 19:13:00
python 定时器,实现每天凌晨3点执行的方法
2023-06-25 12:32:01
python实现简单图片物体标注工具
2021-09-07 21:31:50
详解pytorch 0.4.0迁移指南
2023-04-10 08:02:14
Python数据结构队列解决约瑟夫斯问题
2022-01-07 03:20:53
Python代码使用 Pyftpdlib实现FTP服务器功能
2022-02-11 16:40:55
详解PHP变量传值赋值和引用赋值变量销毁
2023-10-25 00:27:31
python调用cmd命令行制作刷博器
2023-07-26 15:18:35
网页推广设计的几个要点
2011-01-10 20:41:00
SQL Server数据库查询优化的常用方法总结
2008-12-10 14:43:00
浅谈Python 的枚举 Enum
2021-02-01 16:42:15