08 认证、权限、频率控制组件

编辑本文章

GGGG-XXXX版本认证

GGGG-XXXX权限频率

1、认证组件介绍

2、认证类源码流程

  1、自己创建一个认证类,并实现authenticate方法,返回一个元组

  2、在配置文件或试图函数下进行配置

setting下配置,全局验证

 

在试图函数下配置,只对该试图函数生效

3、框架提供认证模块

rest_framework\authentication.py

4、权限组件

权限组件的初始化虽然是在验证后,但是任然会走一遍

1、在setting中配置DEFAULT_PERMISSION_CLASSES=[]是全局配置,认证和权限一般都在视图下配置

2、自定义权限类,并写方法

3、在需要验证权限的类中添加permission_classes=[]配置

5、框架提供的权限组件

6、自定义实现限流类

限流类在认证和权限之后执行,前面组件认证不过,不会走到频率控制类

import time
from rest_framework.throttling import BaseThrottle
VISIT_RECORD={}
class MyThrottle(BaseException):
    def __init__(self):
        self.history=None
    def allow_request(self,request,view):
        #实现限流逻辑,通过返回True,不通过返回False
        #以IP限流
        #访问列表
        now = time.time()
        ip=request.META.get("REMOTE_ADDR")
        if ip not in VISIT_RECORD:
            VISIT_RECORD[ip]=[now,]
            return True
        history=VISIT_RECORD[ip]
        # 将最新时间放在第一位,后面可直接pop旧值
        history.insert(0,now)
        # 确保最新和最老的时间差为1分钟
        while history and history[0]-history[-1]>60:
            history.pop()
        self.history=history
        # 判断history的长度,大于3次标示限流
        if len(history)>3:
            return False
        return True
    def wait(self):
        #返回需要再等待的时间
        white_time=60-(self.history[0]-self.history[-1])
        return white_time
View Code

在试图函数中配置

  访问达到频率控制会给出提示

7、框架实现限流

  {'s': 1, 'm': 60, 'h': 3600, 'd': 86400}

  1、配置限流类

  2、在setting下配置

  测试

 

posted @ 2019-06-25 13:24  丫丫625202  阅读(111)  评论(0编辑  收藏  举报