drf的权限和频率

wjs521 wjs521     2023-01-21     459

关键词:

DRF的权限

权限组件源码

权限和频率以及版本认证都是在initial方法里初始化的

技术分享图片

技术分享图片

我们的权限类一定要有has_permission方法~否则就会抛出异常~~这也是框架给我提供的钩子~~

 在rest_framework.permissions这个文件中~存放了框架给我们提供的所有权限的方法~~技术分享图片

主要说下BasePermission 这个是我们写权限类继承的一个基础权限类~~~ 

权限的详细用法

initial方法在初始化的时候是有顺序的:版本-->权限-->频率 

写权限类

class MyPermission(object):
    message = ‘权限不足‘

    def has_permission(self, request, view):
        # 权限逻辑
        """
        自定义VIP用户权限,
        注意我们初始化时候的顺序是:版本-->权限-->频率 
        所以只要认证通过我们这里就可以通过request.user,拿到我们用户信息
        request.auth就能拿到用户对象
        """
        user_obj = request.user
        if user_obj.type == 1:
            return False
        else:
            return True

 局部视图注册

class TestPermission(APIView):
    authentication_classes = [MyAuth, ]
    permission_classes = [MyPermission, ]

    def get(self, request):
        return Response(‘vip用户能看的电影‘)

全局注册 settings.py

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"]

 DRF的频率

频率限制是做什么的

开放平台的API接口调用需要限制其频率,以节约服务器资源和避免恶意的频繁调用。

我们的DRF提供了一些频率限制的方法。

频率组件源码

版本、认证、权限、频率这几个组件的源码是一个流程。

频率组件原理

DRF中的频率控制基本原理是基于访问次数和时间的,当然我们可以通过自己定义的方法来实现。

当我们请求进来,走到我们频率组件的时候,DRF内部会有一个字典来记录访问者的IP,

以这个访问者的IP为key,value为一个列表,存放访问者每次访问的时间,

  IP1: [第三次访问时间,第二次访问时间,第一次访问时间],

把每次访问最新时间放入列表的最前面,记录这样一个数据结构后,通过什么方式限流呢~~

如果我们设置的是10秒内只能访问5次,

  -- 1,判断访问者的IP是否在这个请求IP的字典里

  -- 2,保证这个列表里都是最近10秒内的访问的时间

      判断当前请求时间和列表里最早的(也就是最后的一个的)请求时间的差

      如果差大于10秒,说明请求已经不是最近10秒内的,删除掉,

      继续判断倒数第二个,直到差值小于10秒

  -- 3,判断列表的长度(即访问次数),是否大于我们设置的5次,

      如果大于就限流,否则放行,并把时间放入列表的最前面。

频率组件的详细用法

频率组件的配置方式其实跟上面的组件都一样。

 

drf权限频率(代码片段)

DRF的权限 权限是什么大家之前都应该听过权限~那么我们权限到底是做什么用的呢~~大家都有博客~或者去一些论坛~一定知道管理员这个角色~比如我们申请博客的时候~一定要向管理员申请~也就是说管理员会有一些特殊的权利~... 查看详情

drf权限和频率限制(代码片段)

权限viewsfromrest_framework.permissionsimportBasePermissionfromrest_frameworkimportexceptions#权限类操作classMyPermission(BasePermission):#也是一种报错,返回给前端message='code':10001,'error':'你没权限'defhas_permission(self,request,view):""&q... 查看详情

drf权限频率(代码片段)

DRF权限频率什么是权限简单的说就是对某件事情决策的范围和程度,例如对数据的操作,普通用户只能查看,管理员用户可以增删改查权限组件源码执行APIView的方法,APIView返回View中的view函数,然后调用的dispatch方法,然后执行... 查看详情

drf认证权限频率(代码片段)

目录一认证Authentication认证源码分析自定义认证方案二权限Permissions源码分析使用内置提供的权限举例自定义权限三限流Throttling使用实列可选限流类实例自定义频率类一认证Authentication认证组件:校验用户-游客、合法用户、非法... 查看详情

drf-jwt认证组件权限组件频率组件的使用(代码片段)

目录drf-jwt认证组件、权限组件、频率组件的使用认证组件权限组件频率组件drf-jwt签发token源码分析自定义签发token实现多方式登录源码分析多方式登陆签发token实例频率组件自定义频率类drf-jwt认证组件、权限组件、频率组件的使... 查看详情

drf08(代码片段)

目录三大认证流程认证组件权限组件频率组件自定义token的签发三大认证流程由于DRF中,所有的视图类都要直接和间接继承APIView类,也只有APIView类中才有dispatch方法,所以所有的请求都要经过三大认证,认证通过后执行相应请求的视... 查看详情

drf-认证权限频率过滤排序分页(代码片段)

1.认证组件1.1局部认证1.首先写两个接口,一个查询单个一个查询所有,我们利用视图扩展类和视图子类写在一个视图类上:views.py:fromrest_framework.viewsetsimportViewSetMixinfromrest_framework.genericsimportListAPIViewfromrest_framework.mixinsimportRetrieveMo... 查看详情

drf之文档生成和jwt(代码片段)

...能访问3.3控制登录接口返回的数据格式3.4自定义基于jwt的权限类3.5手动签发token(多方式登录)3.6jwt的配置参数1自定制频率#自定制频率类,需要写两个方法 -#判断是否限次:没有限次可以请求True,限次了不可以请求False defallow_r... 查看详情

drf权限的流程(代码片段)

DRF权限的流程djangorestframework,入口是dispatch,然后依次--->>封装请求--->>处理版本--->>>认证--->>>权限--->>>限制访问频率(1)auth需要通过token唯一标识来认证(2)通过auth认证后得到,用户user信息,但... 查看详情

drf--认证,权限,限制(代码片段)

 认证、权限和限制身份验证是将传入请求与一组标识凭据(例如请求来自的用户或其签名的令牌)相关联的机制。然后权限和限制组件决定是否拒绝这个请求。简单来说就是:认证确定了你是谁权限确定你能不能访问某个接... 查看详情

drf版本认证权限限制解析器和渲染器(代码片段)

...局部配置(使用较少)二.DRF之认证内置的认证步骤三.DRF之权限1.自定义一个权限类2.权限局部配置3.权限全局配置四.DRF之限制1.使用自定义限制类1.1自定义一个限制类1.2限制局部配置1.3限制全局配置2.使用内置限制类2.1定义内置限制... 查看详情

drf版本认证权限限制解析器和渲染器(代码片段)

...局部配置(使用较少)二.DRF之认证内置的认证步骤三.DRF之权限1.自定义一个权限类2.权限局部配置3.权限全局配置四.DRF之限制1.使用自定义限制类1.1自定义一个限制类1.2限制局部配置1.3限制全局配置2.使用内置限制类2.1定义内置限制... 查看详情

drf认证--2019-08-0818:02:57(代码片段)

...法来初始化我们的版本.而在initial方法里有我们的认证、权限、频率组件,如下图:我们再点进去认证组件看看:可以看到,我们的权限组件返回的是request.user,那 查看详情

DRF 权限最佳实践 DRY

】DRF权限最佳实践DRY【英文标题】:DRFpermissionsbestpractiseDRY【发布时间】:2021-08-0322:37:45【问题描述】:目前根据用户类型在DRF中查看权限的最佳方法是什么?在我的结构中有几个user_types,例如TEAM_LEADER无法创建team对象,但可以... 查看详情

认证权限频率自定义签发token-多方式登录(代码片段)

目录三大认证流程图路由配置认证组件权限组件自定义权限类配置drf自带的权限类drf-jwt签发token源码分析多方式登录签发tokenVIP用户认证权限例子频率组件自定义频率类三大认证流程图路由配置在应用下新建文件router.py#router.pyfro... 查看详情

drf之版本控制认证和权限组件(代码片段)

一、版本控制组件1、为什么要使用版本控制首先我们开发项目是有多个版本的当我们项目越来越更新,版本就越来越多,我们不可能新的版本出了,以前旧的版本就不进行维护了像bootstrap有2、3、4版本的,每个版本都有它对应... 查看详情

drf框架8系统权限类使用用户中心信息自查token刷新机制认证组件项目使用:多方式登录权限组件项目使用:vip用户权限频率组件异常组件项目使用(代码片段)

系统权限类使用图书接口:游客只读,用户可增删改查权限使用fromrest_framework.permissionsimportIsAuthenticatedOrReadOnlyclassBookViewSet(ModelViewSet):#游客只读,用户可增删改查permission_classes=[IsAuthenticatedOrReadOnly]queryset=models.Book.objects.all()seriali... 查看详情

06drf源码剖析之权限(代码片段)

目录06drf源码剖析之权限1.权限简述2.权限使用3.源码剖析4.总结06drf源码剖析之权限1.权限简述权限与身份验证和限制一起,决定了是否应授予请求访问权限。权限检查始终在视图的最开始处运行,然后再允许执行其他任何代码。... 查看详情