频率组件

 import time

 from rest_framework.throttling import BaseThrottle,SimpleRateThrottle

 IP_DICT = {}
class Throttling(BaseThrottle): def __init__(self):
self.history = None def allow_request(self, request, view):
ctime = time.time()
remote_addr = request.META.get("REMOTE_ADDR") if remote_addr not in IP_DICT:
IP_DICT[remote_addr] = [ctime]
return True history = IP_DICT[remote_addr]
self.history = history while history and history[-1] < ctime - 60:
history.pop() if len(history) < 3:
history.insert(0, ctime)
return True def wait(self):
ctime = time.time()
return 60 - (ctime - self.history[-1])

在使用的视图类中加入:

throttle_classes = [Throttling]

继承一个简单的频率类
 class SimpleThrottling(SimpleRateThrottle):

     rate = "5/m" #局部配置
# scope = "visit_rate" #全局配置 def get_cache_key(self, request, view):
return self.get_ident(request)

  全局配置

 REST_FRAMEWORK = {
'DEFAULT_THROTTLE_CLASSES': (
"app01.utils.app_throttle.SimpleThrottling",
),
'DEFAULT_THROTTLE_RATES': {
"visit_rate": "5/m"
}
}

  局部配置

 throttle_classes = [SimpleThrottling]

url注册器

 from django.contrib import admin
from django.urls import path,re_path,include from rest_framework import routers from app01 import views router = routers.DefaultRouter()
router.register("books",views.BookView) urlpatterns = [
path('admin/', admin.site.urls), # path('books/', views.BookView.as_view()),
# re_path('books/(?P<pk>\d+)/', views.BookFilterView.as_view()), # path('books/', views.BookView.as_view({
# 'get':'list',
# "post":"create"
# })),
# re_path('books/(?P<pk>\d+)/', views.BookView.as_view({
# "get":"retrieve",
# "put":"update",
# "delete":"destroy"
# })),
re_path("^",include(router.urls)),
path('user/',views.UserView.as_view())
]

响应器

from rest_framework.renderers import JSONRenderer,BrowsableAPIRenderer

renderer_classes = [JSONRenderer] #之支持json格式的渲染,而不支持浏览器的渲染

分页器

 # 自定义一个分页器类
from rest_framework.pagination import PageNumberPagination class MyPagonation(PageNumberPagination):
page_size = 3  全局配置"PAGE_SIZE"
page_query_param = "page"
page_size_query_param = "size"
max_page_size = 5

  局部配置

pagination_class = MyPagonation

  

rest-framework频率组件、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. DRF(5) - 频率组件、url注册器、响应器、分页器

    一.频率组件 1.使用DRF简单频率控制实现对用户进行访问频率控制 1)导入模块,定义频率类并继承SimpleRateThrottle # 导入模块 from rest_framework.throt ...

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

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

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

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

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

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

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

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

随机推荐

  1. [LeetCode] 369. Plus One Linked List 链表加一运算

    Given a non-negative number represented as a singly linked list of digits, plus one to the number. T ...

  2. [LeetCode] 535. Encode and Decode TinyURL 编码和解码短网址

    Note: This is a companion problem to the System Design problem: Design TinyURL. TinyURL is a URL sho ...

  3. [LeetCode] 621. Task Scheduler 任务调度

    Given a char array representing tasks CPU need to do. It contains capital letters A to Z where diffe ...

  4. node + promise 实现文件读写

    const fs = require('fs'); const promise = new Promise((resolve, reject) => {     fs.open('./c.txt ...

  5. javascript实现每秒执行一次的方法

    javascript实现每秒执行一次的方法 <pre> i=0; function showzhandou() { $('.zhandouresult p').eq(i).fadeIn() ...

  6. 大型web项目构建之负载均衡

    日常开发和学习中经常会听到或者会看到“负载均衡”这个词汇,但是对于很多初级每天只面对增删改代码的开发人员来说,这个词汇好像离我们很遥远又很接近,很多人多多少少都有点一知半解 我结合以前在开发中遇到的场 ...

  7. 21 javaweb开发--bug调试技巧

    1.当修改代码后,测试时没有任何效果 解决方案:换个浏览器试试,可能是浏览器缓存的原因.

  8. day33——进程的创建方式、pid、空间隔离、join方法、其他属性、守护进程

    day33 进程创建的两种方式 在windows环境下,开启进程必须在______name______ == "______main______"下面 p.start(): 只是向 ...

  9. 《Docker Deep Dive》Note - 纵观 Docker

    <Docker Deep Dive>Note 由于GFW的隔离,国内拉取镜像会报TLS handshake timeout的错误:需要配置 registry-mirrors 为国内源解决这 ...

  10. 【C#】上机实验二

    实验1: 求解 1/1 + 1 / 2  + 1 / 3  + 1 / 4 …… + 1 / i = ? 确保精度在 1e-6内. using System; using System.Collect ...