一、频率组件

1、使用DRF简单频率控制实现对用户进行访问频率控制

  1)导入模块,定义频率类并继承SimpleRateThrottle

# 导入模块
from rest_framework.throttling import SimpleRateThrottle # 定义频率类并继承SimpleRateThrottle
class RateThrottle(SimpleRateThrottle):
rate = '5/m' # 指定访问频率,5/m表示 每分钟5次 def get_cache_key(self, request, view):
return self.get_ident(request)

  rate代表访问频率,上面表示每分钟五次,get_cache_key是必须存在的,它的返回值告诉当前频率控制组件要使用什么方式区分访问者(比如ip地址)。

  2)在视图中使用频率类

from rest_framework.viewsets import ModelViewSet

class BookView(ModelViewSet):

    authentication_classes = [UserAuth]  # 指定认证类
permission_classes = [UserPerms] # 指定权限类
throttle_classes = [RateThrottle] # 使用频率类 queryset = Book.objects.all()
serializer_class = BookSerializer

2、全局访问频率控制

  首先定义一个频率控制类,并且必须继承SimpleRateThrottle这个类,它是DRF提供的一个方便的频率控制类,如下:

from rest_framework.throttling import SimpleRateThrottle
class RateThrottle(SimpleRateThrottle):
scope = "visit_rate" def get_cache_key(self, request, view):
return self.get_ident(request)

  另外,我们需要在全局配置频率控制参数:

REST_FRAMEWORK = {
"DEFAULT_THROTTLE_CLASSES": ('ap.utils.throttles.RateThrottle',),
"DEFAULT_THROTTLE_RATES": {
"visit_rate": "5/m"
}
}

  这样就实现了,每分钟最多五次访问.

二、url注册器

  通过DRF的视图组件,数据接口逻辑被我们优化到最后剩下一个类,接下来,我们使用DRF的url控制器来帮助我们自动生成url,使用步骤如下:

from django.urls import re_path, include
# 1.导入模块
from rest_framework import routers from serializer import views
# 2.实例化一个router对象
router = routers.DefaultRouter()
# 3.将需要自动生成url的接口注册到router中
router.register('books', views.BookView)
# 4.生成url
urlpatterns = [
re_path('^', include(router.urls))
]

三、响应器

  之前我们使用DRF的Response类来将数据响应给客户端,不管是POSTMAN还是浏览器,都能浏览到经过格式化后的漂亮的数据,DRF是怎么做的呢?其实就是通过响应器组件。

  如果我们不需要使用DRF提供给浏览器的格式化后的数据,只需要禁止该响应方式即可:

from rest_framework.renderers import JSONRenderer

class BookView(ModelViewSet):

    renderer_classes = [JSONRenderer]

    queryset = Book.objects.all()
serializer_class = BookSerializer

  这样,浏览器再次访问,接收到的就是普通的json格式数据,而不是经过DRF格式化后的数据,renderer_classes的查找逻辑与之前的解析器等组件是完全一样的。

四、分页器

  为了服务器性能考虑,也为了用户体验,我们不应该一次将所有的数据从数据库中查询出来,返回给客户端浏览器,如果数据量非常大,这对于服务器来讲,可以说是性能灾难,而对于用户来讲,加载速度将会非常慢。

  所以,我们需要控制每次返回给客户端多少数据,这就需要用到分页器。

1、接下来,介绍一下DRF的局部实现分页器组件

# 1.导入模块
from rest_framework.pagination import PageNumberPagination # 自定义分页器类,继承PageNumberPagination
class MyPagination(PageNumberPagination):
page_size = 3
page_query_param = 'p'
page_size_query_param = 'size'
max_page_size = 5 class BookView(APIView): def get(self, request):
# 2.获取数据
queryset = Book.objects.all()
# 3.创建分页器对象
paginater = MyPagination()
# 4.开始分页
paged_books = paginater.paginate_queryset(queryset, request)
# 5.将分页后的数据进行序列化
serializer_books = BookSerializer(paged_books, many=True)
# 6.返回数据
return Response(serializer_books.data)

2、参数介绍

page_size:用来控制每页显示多少条数据(全局参数名为PAGE_SIZE);
page_query_param:用来提供直接访问某页的数据;
page_size_query_param:临时调整当前显示多少条数据;
max_page_size:控制page_size_query_param参数能调整的最大条数;

3、在ModelViewSet中使用分页器

from rest_framework.viewsets import ModelViewSet
from rest_framework.pagination import PageNumberPagination # 自定义分页器类
class MyPagination(PageNumberPagination):
page_size = 3
page_query_param = 'p'
page_size_query_param = 'size'
max_page_size = 5 class BookView(ModelViewSet): pagination_class = MyPagination # 指定分页器类 queryset = Book.objects.all()
serializer_class = BookSerializer

4、分页器全局配置

REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10 # 每页数目
}

DRF(5) - 频率组件、url注册器、响应器、分页器的更多相关文章

  1. rest认证组件,权限组件,频率组件,url注册器,响应器组件,分页器组件

    1.认证组件 1.1 认证组件利用token来实现认证 1.2 token认证的大概流程 用户登录===>获取用户名和密码===>查询用户表 如果用户存在,生成token,否则返回错误信息 ...

  2. DRF之注册器响应器分页器

    概要 url注册器 响应器 分页器 url注册器 通过DRF的视图组件,数据接口逻辑被我们优化到最剩下一个类,接下来,我们使用DRF的url控制器来帮助我们自动生成url,使用步骤如下: 第一步:导入 ...

  3. DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

    DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件   本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...

  4. day91 DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

    DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件   本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...

  5. Restful 4 -- 认证组件、权限组件、频率组件、url注册器、响应器、分页器

    一.认证组件.权限组件.频率组件总结:  只有认证通过的用户才能访问指定的url地址,比如:查询课程信息,需要登录之后才能查看,没有登录,就不能查看,这时候需要用到认证组件 1.认证组件格式 写一个认 ...

  6. 20.DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

    一 认证组件 1. 局部认证组件 我们知道,我们不管路由怎么写的,对应的视图类怎么写的,都会走到dispatch方法,进行分发, 在咱们看的APIView类中的dispatch方法的源码中,有个sel ...

  7. day 89 DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

    DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件   本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...

  8. rest-framework频率组件、url注册器、响应器、分页器

    频率组件 import time from rest_framework.throttling import BaseThrottle,SimpleRateThrottle IP_DICT = {} ...

  9. django url注册器组件, 响应器组件, 分页器组件

    一.url注册器的使用 1.1导入模块 from django.urls import re_path, include from .serializer import views from rest ...

随机推荐

  1. asp.net出现的异常:"由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值" 的解决方法

    引用: https://support.microsoft.com/zh-cn/kb/312629 症状 如果您使用的Response.End. Response.Redirect或Server.Tr ...

  2. JavaScript绘图类 (DIV绘图)

    主要的图形算法抄自一个叫w_jsGraphics.js的类库,第一次看到那个库的时候,感觉那是十分神奇的存在.不过估计现在那个库早就已经找不到了. 这是很早之前的一个DIV绘图类,那时候VML+SVG ...

  3. mysql—Access denied for user 'root'@'localhost' (using password:NO)

    安装mysql未设置初始密码,登录提示Access denied for user 'root'@'localhost' (using password:NO): 解决方案:  sudo /etc/i ...

  4. edmx-新建表

  5. Zookeeper 报ConnectionLostException连接丢失错误汇总

    我google出来的几个结果都没有用,这里写出来或许可以帮助别人,这些都是google出来的结果,没有经过验证是否真的能够解决问题. 当前zookeeper的连接状态是connecting,这个时候连 ...

  6. String.Join

    在指定 String 数组的每个元素之间串联指定的分隔符 String,从而产生单个串联的字符串.(来源于MSDN) 有两个重载函数:[C#]public static string Join(   ...

  7. 2017 ACM区域赛(南宁站) 参赛流水账

    day0: 早上四点起床赶飞机,还好没有吵醒室友导致被打死.本来想在飞机上准备一下下周的小测,结果飞机一点都不平稳,只能全程和队友吹逼聊天.下午在宾馆里和johann通关了一部合金弹头,重温了童年的经 ...

  8. 【BZOJ】3401: [Usaco2009 Mar]Look Up 仰望(单调栈)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3401 还能更裸一些吗.. 维护一个递减的单调栈 #include <cstdio> #i ...

  9. (转)Unity笔记之编辑器(UnityEditor)

    在使用unity3d的过程中,时常会需要从场景中寻找或者调用一个对象,而Unity就提供了一个贴心的功能——拖拽.用鼠标拖一下中比写堆代码直观的多吧!但是Unity提供的远远不止这一丢丢,下面我们来简 ...

  10. 【微信小程序】支付过程详解

    一.介绍 今天跟大家分享微信小程序集成支付. 二.分析 1.小程序支付API 地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-pay.html ...