经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Django » 查看文章
Django 对IP访问频率进行限制的例子
来源:jb51  时间:2019/8/30 11:46:30  对本文有异议

REST_FRAMEWORK 配置

对使用 rest_framework 框架的项目来说,可以使用框架的设置来对api的访问频率进行限制

  1. REST_FRAMEWORK = {
  2. 'DEFAULT_PARSER_CLASSES': (
  3. 'rest_framework.parsers.JSONParser',
  4. 'rest_framework.parsers.FormParser',
  5. 'rest_framework.parsers.MultiPartParser',
  6. ),
  7.  
  8. 'DEFAULT_AUTHENTICATION_CLASSES': (
  9. # 'lecare.core.rest_auth.CrossSiteSessionAuthentication',
  10. ),
  11.  
  12. 'DEFAULT_PERMISSION_CLASSES': [
  13. # 'rest_framework.permissions.IsAuthenticated',
  14. 'rest_framework.permissions.AllowAny',
  15. ],
  16.  
  17. 'PAGE_SIZE': 20,
  18. 'UNICODE_JSON': False,
  19. # 'COERCE_DECIMAL_TO_STRING': False,
  20. # 'EXCEPTION_HANDLER': 'lecare.core.custom_exception_handler.custom_exception_handler',
  21. 'JWT_EXPIRATION_DELTA': datetime.timedelta(hours = 2),
  22. 'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days = 360),
  23. 'JWT_ALLOW_REFRESH': False,
  24. 'JWT_AUTH_HEADER_PREFIX': 'JWT',
  25. 'JWT_PAYLOAD_HANDLER': 'consumer.jwt_conf.jwt_payload_handler',
  26. 'JWT_RESPONSE_PAYLOAD_HANDLER': 'consumer.jwt_conf.jwt_response_payload_handler',
  27. 'JWT_GET_USER_SECRET_KEY': 'consumer.jwt_conf.jwt_get_secret_key',
  28. # 'DEFAULT_THROTTLE_CLASSES': (
  29. # # 开启匿名用户接口请求频率限制
  30. # 'rest_framework.throttling.AnonRateThrottle',
  31. # # 开启授权用户接口请求频率限制
  32. # 'rest_framework.throttling.UserRateThrottle'
  33. # ),
  34. # 'DEFAULT_THROTTLE_RATES': {
  35. # # 频率限制有second, minute, hour, day
  36. # # 匿名用户请求频率
  37. # 'anon': '30/second',
  38. # # 授权用户请求频率
  39. # 'user': '30/second'
  40. # }
  41. }

使用middleware中间件来限制IP频率

  1. import time
  2. from django.utils.deprecation import MiddlewareMixin
  3. MAX_REQUEST_PER_SECOND=2 #每秒访问次数
  4.  
  5. class RequestBlockingMiddleware(MiddlewareMixin):
  6. def process_request(self,request):
  7. now=time.time()
  8. request_queue = request.session.get('request_queue',[])
  9. if len(request_queue) < MAX_REQUEST_PER_SECOND:
  10. request_queue.append(now)
  11. request.session['request_queue']=request_queue
  12. else:
  13. time0=request_queue[0]
  14. if (now-time0)<1:
  15. time.sleep(5)
  16. request_queue.append(time.time())
  17. request.session['request_queue']=request_queue[1:]
  18.  
  19. #启用RequestBlocking中间件
  20. IDDLEWARE = [
  21. 'django.middleware.security.SecurityMiddleware',
  22. 'django.contrib.sessions.middleware.SessionMiddleware',
  23. 'django.middleware.common.CommonMiddleware',
  24. 'django.middleware.csrf.CsrfViewMiddleware',
  25. 'common.middleware.RequestBlockingMiddleware', #在sessions之后,auth之前
  26. 'django.contrib.auth.middleware.AuthenticationMiddleware',
  27. 'django.contrib.messages.middleware.MessageMiddleware',
  28. 'django.middleware.clickjacking.XFrameOptionsMiddleware',
  29. ]

以上这篇Django 对IP访问频率进行限制的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号