1,DRF的认证

  • 初识认证:浏览器是无状态的,一次导致每次发的请求都是新的请求,所以每次请求,服务器都会进行校验,这样就很繁琐,这趟我们就需要给每一个用户登录后一个新的标识,浏览器每次都会带着这个唯一标识和在服务器中的标识做匹配,成功就通过,不成功就不通过.
  • 认证的使用,见下图:

1.2, DRF的相关代码:

model表的创建
view视图函数
认证类
视图的测试

2,DRF权限

  • 和django的全下类似,restframeworke也是给某一些用户添加角色,通过给不同的角色分配不同的权限,
  • 源码分析如下:

说明:因为python代码是一行一行执行的,所以先是认证,然后是权限,在是频率,按这个顺序执行代码.

权限代码如下:

权限类
权限的视图view
REST_FRAMEWORK = {
# 默认使用的版本控制类
'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning',
# 允许的版本
'ALLOWED_VERSIONS': ['v1', 'v2'],
# 版本使用的参数名称
'VERSION_PARAM': 'version',
# 默认使用的版本
'DEFAULT_VERSION': 'v1',
# 配置全局认证
# 'DEFAULT_AUTHENTICATION_CLASSES': ["BRQP.utils.MyAuth", ]
# 配置全局权限
"DEFAULT_PERMISSION_CLASSES": ["BROP.utils.MyPermission"]
}

3,DRF频率

  • 频率的由来:开发的API接口调用需要限制其频率,以节约服务器资源和避免恶意的频繁调用
  • 源码截图如下:

前边的和上边的一样,剩下的只有这一个不一样

3.1,具体代码如下:

自定义频率限制类
自定义频率限制类的配置

3.2,频率限制的频率如下:

  • DRF中的频率控制基本原理是基于访问次数和时间的,当然我们可以通过自己定义的方法来实现,当我们请求进来时,走到我们频率组件的时候,DRF内部会有一个字典记录访问者的ip,以这个访问者的ip作为key,value为一个列表,存放每次访问的时间,(IP1:[第三次访问的时间, 第二次访问的时间, 第一次访问的时间])把每次访问的最新时间放入列表的最前端,记录这样一个数据结构,我们就可以通过限制时间和次数去限流

    • 判断访问者的IP是否在这个请求的IP字典中
    • 保证这个列表里都是最近10秒内访问的时间
      • 判断当前请求时间和和列表里最早的请求时间差
      • 如果大于10秒,说明请求以及不是最近10秒的,需要删除掉
      • 继续判断倒数第二个,直到差小于10秒
    • 判断列表的长度(即访问次数)是否大于我们设置的5次,如果大于就限流,并把时间放入最前端.

4,DRF的生命周期

最新文章

  1. 08. Web大前端时代之:HTML5+CSS3入门系列~H5 Web存储
  2. eclipse的常用快捷键
  3. EXT Grid 默认展开所有行
  4. 图解SQL的inner join、left join、right join、full outer join、union、union all的区别
  5. C++线性方程求解
  6. Java中实现异常处理的基础知识
  7. logback.xml_appender配置
  8. [itint5]棋盘漫步
  9. 35个jQuery小技巧!
  10. java开发中获取路径的一些方式
  11. mysql服务无法正常启动
  12. ROS(indigo)RRT路径规划
  13. 7种方法实现移动端Retina屏幕1px边框效果
  14. POJ No.2386 Lake Counting
  15. altium designer应用技巧---cyclone IV代芯片底部焊盘问题
  16. thinkphp nginx+phpcgj安装配置
  17. rac数据库单连接报错ora-12537解决办法
  18. Spring4 MVC RESTFul WebServices CRUD实例+RestTemplate
  19. 经验之谈:10位顶级PHP大师的开发原则
  20. 第98天:CSS3中transform变换详解

热门文章

  1. angularJS transclude
  2. 条款9:绝不在构造和析构过程中调用virtual函数(Never call virtual functions during construction or destruction)
  3. Cisco路由器交换机基础配置
  4. Android Ubuntu 12.04 源码环境搭建
  5. python3--产生偏移和元素:enumerate
  6. hexo干货系列:(二)hexo主题下载及配置
  7. irules事件和命令
  8. 七牛云 X 英语流利说:教育 3.0 时代的智能突破
  9. HDU1213最简单的并查集问题
  10. [luoguP1772] [ZJOI2006]物流运输(DP + spfa)