首页 > 其他分享 >DRF - 过滤与排序、分页器

DRF - 过滤与排序、分页器

时间:2023-02-07 21:58:26浏览次数:40  
标签:throttling 局部 py 视图 过滤 频率 全局 排序 DRF

目录

频率组件


1.频率限制

访问频率的限制,可以进行对爬虫等恶意行为进行预防。

使用drf的频率限制对网站接口访问,只需要直接进行配置即可

2.频率认证步骤

(1)编写一个频率类,继承【频率模块】中的SimpleRateThrottle

  • 编写频率类,继承SimpleRateThrottle,也可以继承BaseThrottle但是要写的代码更加复杂
from rest_framework.throttling import BaseThrottle, SimpleRateThrottle

(2)重写get_cache_key方法,在源码中发现该方法需要两个参数request和view,来进行频率认证

(3)配置一个类属性:scope = 'xxx'

(4)在配置文件中配置:

DEFAULT_THROTTLE_RATES中,字典的键值需要和频率类中的scope的值对应

'DEFAULT_THROTTLE_RATES': {
      'xxx': '5/m', # m代表分, h代表时, d代表day
  }

(5)全局使用和局部使用

3.全局使用和局部使用

(1)局部权限:对单独的视图类生效

在视图类中,通过throttle_classes来进行限制认证

class BookDetailView(ViewSetMixin, RetrieveAPIView):
    """查询单个"""
    queryset = Book.objects.all()
    serializer_class = BookSerializer
    "局部认证"
    throttle_classes = [CommonThrottle]

(2)全局权限:对于全局的视图类生效

settings.py在配置文件中配置

REST_FRAMEWORK = {
    # 【频率】的全局配置
    'DEFAULT_THROTTLE_CLASSES': [
        'app01.throttling.CommonThrottle'
    ],
    # 【频率限制】
    'DEFAULT_THROTTLE_RATES':
        {'book_5_m': '5/m'},
}

(3)全局权限 + 局部禁用

在全局的基础上,进行局部视图类的频率不进行校验

class BookDetailView(ViewSetMixin, RetrieveAPIView):
    # 列表为空,则为局部禁用
    throttle_classes = [] 

4.代码演示

throttling.py - 频率

# 编写频率类,继承SimpleRateThrottle,也可以继承BaseThrottle但是要写的代码更加复杂
from rest_framework.throttling import BaseThrottle,SimpleRateThrottle

# 频率类
class CommonThrottle(SimpleRateThrottle):
    # 类属性,属性值随便写
    # 配置文件中配置字典的键值需要与scope对应
    scope = 'xxx'
    # 重写 get_cache_key方法,该方法也有两个参数request, view
    def get_cache_key(self,request,view):
        # 1 对于用户访问频率的限制,可以通过ip 或者用户的id来判断
        #   用户客户端的ip地址,在asgi 的request.META 中可以找到,放在REMOTE_ADDR键值对中
        return request.META.get('REMOTE_ADDR')

views.py - 视图类中

在视图类中可以通过局部配置来控制是否进行频率校验

class BookDetailView(ViewSetMixin, RetrieveAPIView):
    """查询单个"""
    queryset = Book.objects.all()
    serializer_class = BookSerializer
    
    "局部频率限制"
    throttle_classes = []

settings.py - 配置文件中

REST_FRAMEWORK = {
    # 【频率】的全局配置
    'DEFAULT_THROTTLE_CLASSES': [
        'app01.throttling.CommonThrottle'
    ],
    # 【频率限制】
    'DEFAULT_THROTTLE_RATES':
        {'xxx': '5/m'},
}

标签:throttling,局部,py,视图,过滤,频率,全局,排序,DRF
From: https://www.cnblogs.com/DuoDuosg/p/17099919.html

相关文章

  • drf权限组件 频率组件 过滤排序 分页
    1认证组件#以后,有的接口需要登录才能访问,有的接口,不等了就能访问 -登录认证的限制#写一个登录接口,返回token,以后只要带着token过来,就是登陆了,不带就是没有登录#......
  • DRF三大认证
    DRF三大认证一、认证组件1.基本使用​ 关于认证组件,现实生活中我们经常用到该组件,比如逛淘宝在首页浏览商品不用登录,搜商品也不需要登录,游客模式即可。但是一旦涉及到......
  • drf之三大认证、过滤、排序、分页组件
    drf之三大认证、过滤、排序、分页组件本文所介绍的组件,都有着很相似的配置方式,继承组件类,类体中配置参数,视图类中配置参数添加对应的组件类或者全局配置,我们就可以方便的......
  • drf-认证、权限、频率、过滤、排序、分页
    1.认证组件1.1局部认证1.首先写两个接口,一个查询单个一个查询所有,我们利用视图扩展类和视图子类写在一个视图类上:views.py:fromrest_framework.viewsetsimportVie......
  • drf从入门到精通 07
    今日内容详细认证组件有些接口需要登录才能够访问有些不需要登录就可以直接访问由此引出来了认证组件需求查看所有和创建无需登陆其他需要登录先写一个登录接口......
  • drf从入门到飞升仙界 06
    模型类准备fromdjango.dbimportmodels#图书跟作者:多对多,需要建立中间表,但是我们可以通过ManyToManyField自动生成,写在哪里都行#图书跟出版社:一对多,一个出版社,出......
  • drf7
    今日内容概要认证组件权限组件频率组件过滤排序分页今日内容详细认证组件有些接口需要登录才能够访问有些不需要登录就可以直接访问由此引出来了认证组件需......
  • 认证组件、权限组件、频率组件、过滤排序、分页
    认证组件、权限组件、频率组件、过滤排序、分页认证组件1.认证组件###视图fromrest_framework.genericsimportListAPIView,RetrieveAPIViewfromrest_framework.m......
  • 数组拷贝及排序
    packagecom.test;importjava.util.*;importstaticjava.util.Arrays.fill;publicclassMain{publicstaticvoidmain(String[]args){int[]a=ne......
  • python之路65 drf从入门到成神 5 认证组件、权限组件、频率组件、过滤排序、分页
    认证组件以后,有的接口需要登录后才能访问,有的接口,不登录就能访问写一个登录接口,返回token,以后只要带着token过来,就是登录了不带就没有登录需求:查询所有不需要登录......