RestFramework之频率组件

一、频率组件的使用

  频率组件的存在对我们这web开发有着很大的影像,它的作用就是限制用户在一段时间内访问的次数。

  下面让我们介绍一下频率组件怎样使用

  1.首先需要导入

from rest_framework.throttling import SimpleRateThrottle

  2.编写我们的频率类

 

class MyThrottle(SimpleRateThrottle):
    scope = "visit_rate"  # 这个值决定了在配置时使用那个变量描述限制的频率

    def get_cache_key(self, request, view):  # 这个方法也是必须要有
        return self.get_ident(request)

  3.最后还需要再setting中配置一下

REST_FRAMEWORK = {
    # ‘DEFAULT_THROTTLE_CLASSES‘: (
    #     ‘app01.utils.throttle_class.MyThrottle‘,
    # ),
    ‘DEFAULT_THROTTLE_CLASSES‘: (
        ‘app01.app_thorttle.MyThrottle‘,
    ),
    "DEFAULT_THROTTLE_RATES": {
        "visit_rate": "5/m",  # 这个参数就是频率类中定义的那个参数scope, 其中第一个数字5表示5次,后面的m表示一分钟,还有s,一秒, h, 一小时, d, 一天
    }
}

duration = {‘s‘: 1, ‘m‘: 60, ‘h‘: 3600, ‘d‘: 86400}

二、如何自己实现频率组件

  1.编写频率类

import time
from rest_framework.throttling import BaseThrottle

class MyThrottle(BaseThrottle):
    visited_record = {}

    def __init__(self):
        self.history = None

    def allow_request(self, request, my_cbv):

        # 这个my_cbv是源码中传的我们的视图类,这里我们也要传进去
        # print(self.get_ident(request))  # 可以获取本次请求的ip
        ip = request.META.get("REMOTE_ADDR")
        if ip not in self.visited_record:
            self.visited_record[ip] = []

        current_time = time.time()
        history = self.visited_record[ip]
        self.history = history
        print(history)

        while history and current_time - history[-1] > 60:  # 把大于60秒的时间都删掉
            history.pop()

        if len(history) > 2:  # 第三次访问,列表中只有2个值,也满足条件
            return False
        history.insert(0, current_time)
        return True

    def wait(self):
        """
        用于返回还剩多少时间访问;

        本次访问时间:9:50:55
        [09:50:30, 09:50:20, 09:50:10]   剩余 60 - (9:50:55 - 09:50:10)秒才能访问
        :return:
        """
        c_time = time.time()
        return 60 - (c_time - self.history[-1])

  2.在视图类中加入

throttle_classes = [MyThrottle]

  效果如图:

  

原文地址:https://www.cnblogs.com/qq631243523/p/10100461.html

时间: 2024-10-02 16:14:53

RestFramework之频率组件的相关文章

REST-framework之频率组件

REST-framework之频率控制 一 频率简介 为了控制用户对某个url请求的频率,比如,一分钟以内,只能访问三次 二 自定义频率类,自定义频率规则 自定义的逻辑 """ 1. 取出访问者ip 2. 判断当前ip不在访问字典里,添加进去,并且直接返回True,表示第一次访问,在字典里,继续往下走 3. 循环判断当前ip的列表,有值,并且当前时间减去列表的最后一个时间大于60s,把这种数据pop掉,这样列表中只有60s以内的访问时间, 4. 判断,当列表小于3,说明一分钟

rest-framework频率组件

throttle(访问频率)组件 1.局部视图throttle from rest_framework.throttling import BaseThrottle VISIT_RECORD={} class VisitThrottle(BaseThrottle): def __init__(self): self.history=None def allow_request(self,request,view): remote_addr = request.META.get('REMOTE_A

自定义频率组件,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:请求所有的东西的字

RestFramework之权限组件

一,RestFramework之权限组件源码解析 restframework的权限组件与认证组件源码类似,都需要我们自己写一个类,然后放在 permission_classes中,或者全局settings中配置: 我们直接看在dispatch()中的权限组件部分干了什么. def initial(self, request, *args, **kwargs): """ Runs anything that needs to occur prior to calling the

RESTful-rest_framework认证组件、权限组件、频率组件-第五篇

认证组件格式: 1 写一个认证类 from rest_framework.authentication import BaseAuthentication class MyAuth(BaseAuthentication): def authenticate(self,request): # request 是封装后的 token = request.query_params.get('token') ret = models.UserToken.objects.filter(token=toke

RestFramework之序列化组件

一.restframework的序列化组件的使用 1.导入序列化组件与模型类 from rest_framework import serializers from app01.models import ( Book, Author, Publish ) 2.书写序列化类 # 创建一个序列化类 class BookSerializer(serializers.Serializer): ''' 开始使用序列化 - 导入模块:from rest_framework import serialize

Django的rest_framework的权限组件和频率组件源码分析

前言: Django的rest_framework一共有三大组件,分别为认证组件perform_authentication,权限组件check_throttles: 我在前面的博客中已经梳理了认证组件,不知道大家有没有看懂:在这里我把认证的组件的博客地址在贴出来,不清楚的人可以看下 局部设置认证组件的博客:https://www.cnblogs.com/bainianminguo/p/10480887.html 全局设置认证组件的博客:https://www.cnblogs.com/baini

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

本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分页组件 七 xxx 八 xxx 一 认证组件 1. 局部认证组件 我们知道,我们不管路由怎么写的,对应的视图类怎么写的,都会走到dispatch方法,进行分发, 在咱们看的APIView类中的dispatch方法的源码中,有个self.initial(request, *args, **kwargs),那么认证.权限.频率这三个默认组件都在这个方法里面了,如果我们自己没有做这三个组件的配置,那么会使用源码中默

DjangoRestFramework之认证组件,权限组件,频率组件

一 . 认证组件 我们现在知道的认证机制有cookie, session,session比较安全,session的信息是存在服务器上的,如果用户量足够大的话,服务器的压力也就比较大,并且django的session存到了django_session表中,不是很好操作,现在生产中使用的一个叫做token机制的方式比较多.可以使用这个机制把token存到用户信息里,当用户登录成功的时候放里面,等他来的时候就要带着这个来,而且们每次来的时候都更新token,防止被拦截. 我们这里使用一下token,首