세 가지 인증 소스 코드 분석

인증 구성 요소

로 디스패치 방법으로, 세 가지 인증을 입력 :

요청에 요청 모듈에서 첫보기

입력 get_authenticators방법을

알 수 있고, 제 2 패키지 요청 오브젝트 요청 모듈은 인증 대상의 클래스 오브젝트 요청에 저장되며, 파싱 모듈을 포함한다.

가장 큰 인증 속으로

완전한 하나 개의 클래스 인증 한 인증을 통과, 클래스의 인증은 각 구성 호출해야 authenticate인증을 완료하는 방법을. 리턴 값은 사용자와 인증 이루어진 튜플이다.

권한 구성 요소

주파수 구성 요소

디스패치 방법에 의해 주파수 성분으로

그런 다음이 allow_request 및 대기 방법, SimpleRateThrottle 클래스를 찾습니다. BaseThrottle, BaseThrottle allow_request 및 대기하는 두 가지 방법이 있습니다,하지만 난 그것을 작성하지 않은 상속 SimpleRateThrottle, 당신은 자신을 작성해야합니다.

우리가 도움 SimpleRateThrottle 클래스를 상속 그래서 우리는 두 가지 방법 allow_request 작성하고 대기

# 可以直接在自定义频率类中配置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은 (키, 값, EXP) 만료 캐시 세트는 EXP 0으로 설정하지만, 캐시 대신되고

self.history에 저장하면 시간을 절약하기 위해 요청하면

제한 시간은 폼 요청한 시간의리스트의 길이에 따라 결정이든

wait 메소드를 입력

추천

출처www.cnblogs.com/setcreed/p/12153408.html