Django Rest Framework 频率组件

1.频率组件

在项目应用目录创建ratethrottle_classes.py文件,get_cache_key是必须存在的,它的返回值告诉当前频率控制组件要使用什么方式区分访问者(比如ip地址)

====(局部使用)

# 导入模块
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)

ratethrottle_classes.py

====(全局使用)

ratethrottle_classes.py

#继承SimpleRateThrottle类

from rest_framework.throttling import SimpleRateThrottle
class RateThrottle(SimpleRateThrottle):
    scope = "visit_rate"

    def get_cache_key(self, request, view):
        return self.get_ident(request)

settings.py

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

局部使用===》在views.py需要使用频率的 视图函数中注册频率类

from rest_framework.viewsets import ModelViewSet
from .authentication_classes import UserAuth
from .permission_classes import UserPerm
from .ratethrottle_classes import RateThrottle
class BookView(ModelViewSet):
    # 在需要认证的数据接口里面指定认证类
    authentication_classes = [UserAuth]
    # 在需要权限的数据接口里面指定权限类
    permission_classes = [UserPerm]

    # 在需要频率的数据接口里面指定频率类
    throttle_classes = [RateThrottle]
    queryset = models.Book.objects.all()
    serializer_class = BookSerizlizer

views.py

全局使用===》不用注册了

******************************************************************************************************************************************

原文地址:https://www.cnblogs.com/cou1d/p/12344475.html

时间: 2024-08-30 17:58:35

Django Rest Framework 频率组件的相关文章

Django Rest Framework --- 序列化组件

一.序列化组件的作用 在前后端分离开发时,前端与后端用来交互的数据的格式是一致的(数据格式为字符串的json数据),于是后端程序员在传递数据时,便要将数据封装成符合格式的数据,如果不借助方法,手动进行数据封装,会非常的浪费时间,在Django rest framework中的序列化组件帮我们解决了这个问题. 二.Django自带的序列化组件 from django.core import serializers def test(request): book_list = Book.object

Django REST framework 基本组件

一.序列化组件 简单使用 开发我们的Web API的第一件事是为我们的Web API提供一种将代码片段实例序列化和反序列化为诸如json之类的表示形式的方式.我们可以通过声明与Django forms非常相似的序列化器(serializers)来实现. models部分: from django.db import models # Create your models here. class Book(models.Model): title=models.CharField(max_leng

Django REST framework —— 权限组件源码分析

在上一篇文章中我们已经分析了认证组件源码,我们再来看看权限组件的源码,权限组件相对容易,因为只需要返回True 和False即可 代码 1 class ShoppingCarView(ViewSetMixin, APIView): 2 permission_classes = [MyPermission, ] 3 def list(self,request, *args, **kwargs): 4 """ 5 查看购物车信息 6 :param args: 7 :param k

django rest framework 序列化组件总结

序列化组件总结 一. 序列化组件本质上为了实现前后端分离,而进行json序列化的一个组件形式,极大方便了解析数据的作用 二. 所有序列化是基于APIView 解析器实现的,通过内部的多继承关系方便实现进行数据序列化的实现 三 使用方式 1.基于APIView 引入  from rest_framework.views import APIView 2.返回的请求用 Response  from rest_framework.response import Response 3.开始进行创建序列化

Django Rest Framework 认证组件

'''用户认证章节''' # 用户认证章节:写一个数据接口 from django.http import JsonResponse from .utils import get_token from rest_framework.exceptions import APIException class UserView(APIView): def post(self, request): # 定义返回消息体 response = dict() # 定义需要的用户信息 fields = {"us

Django Rest Framework 认证组件(权限组件)

from rest_framework.viewsets import ModelViewSet from .authentication_classes import UserAuth from .permission_classes import UserPerm class BookView(ModelViewSet): # 在需要认证的数据接口里面指定认证类 authentication_classes = [UserAuth] # 在需要认证的数据接口里面指定权限类 permissio

自定义频率组件,django自带的组件,解析器

自定义频率组件 from rest_framework.throttling import BaseThrottle, SimpleRateThrottle import time # 设置一分钟只能访问三次 class MyThrottle(BaseThrottle): visitor_dic = {} def __init__(self): self.history = None def allow_request(self, request, view): # META:请求所有的东西的字

基于Django的Rest Framework框架的频率组件

0|1一.频率组件的作用 在我们平常浏览网站的时候会发现,一个功能你点击很多次后,系统会让你休息会在点击,这其实就是频率控制,主要作用是限制你在一定时间内提交请求的次数,减少服务器的压力. modles.py 0|1二.自定义频率组件类 #(1)取出访问者ip # (2)判断当前ip不在访问字典里,添加进去,并且直接返回True,表示第一次访问,在字典里,继续往下走 # (3)循环判断当前ip的列表,有值,并且当前时间减去列表的最后一个时间大于60s,把这种数据pop掉,这样列表中只有60s以内

DRF Django REST framework 之 频率,响应器与分页器组件(六)

频率组件 频率组件类似于权限组件,它判断是否给予请求通过.频率指示临时状态,并用于控制客户端可以向API发出的请求的速率. 与权限一样,可以使用多个调节器.API可能会对未经身份验证的请求进行限制,而对于经过身份验证的请求则进行限制较少. 例如,可以将用户限制为每分钟最多60个请求,每天最多1000个请求. 自定义频率组件 使用方式与权限,认证组件几乎相同 该方式没有DRF提供的方式简洁 import time import math from rest_framework import exc