码迷,mamicode.com
首页 > 其他好文 > 详细

三大认证源码分析

时间:2020-01-05 20:33:19      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:pytho   one   ini   img   _for   none   设置   通过   wait方法   

认证组件

通过dispath方法,进入三大认证:

技术图片

首先看一下请求模块,进入request

技术图片

进入get_authenticators 方法

技术图片

可以知道,请求模块二次封装request对象,包含解析模块,还将认证类们的对象存储在请求对象中。

进入三大认证

技术图片

技术图片

技术图片

遍历一个个认证器,完成一个个认证类,每一个配置的认证类都要调用authenticate方法完成认证。返回值是user和auth组成的元组。

技术图片

权限组件

技术图片

技术图片

频率组件

通过dispatch方法 进入频率组件

技术图片

然后看SimpleRateThrottle类,有allow_request和 wait 方法。SimpleRateThrottle继承BaseThrottle,BaseThrottle也有allow_request和 wait两个方法,但它没写,需要自己写。

所以我们继承SimpleRateThrottle类,它帮我们写了allow_request和 wait两个方法

技术图片

技术图片

技术图片

# 可以直接在自定义频率类中配置rate,这就是要动源码了
rate = '3/min'

# 但是推荐在自定义频率类中配置scope属性,然后再在settings文件中设置scope
class MobileReateThrottle(SimpleRateThrottle):
    scope = 'mobile'
    def get_cache_key(self, request, view):
        if not request.user.is_authenticated or not request.user.mobile:
            return None   # 匿名用户   没有电话号的用户都不限制
        
        return self.cache_format % {
            'scope': self.scope,
            'ident': request.user.mobile
        }
    

# settings文件
REST_FRAMEWORK = {
    # 频率组件,频率类一般做局部配置,但是频率调节在settings中配置
    'DEFAULT_THROTTLE_RATES': {
        'user': '5/min',   # 登录用户限制
        'anon': '3/min',   # 匿名用户限制,
        'mobile': '1/min'
    },

}

技术图片

技术图片

来到上面的__init__方法中

技术图片

回到allow_request

技术图片

cache.set(key, value, exp) 设置过期缓存,exp设为0,代表缓存不过期

请求一次,将时间保存一次,保存在self.history中

根据请求时间形成的列表长度判断是否限次

技术图片

技术图片

技术图片

进入wait方法

技术图片

三大认证源码分析

标签:pytho   one   ini   img   _for   none   设置   通过   wait方法   

原文地址:https://www.cnblogs.com/setcreed/p/12153408.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!