2017-12-20 3 views
0

장고 1.11과 파이썬 2.7을 사용하고 있으며 내 웹 서비스에 스로틀을 포함 시키려고했습니다. 장고가 당신을 위해 모든 일을하기 때문에 이것은 처음에는 아주 쉬워 보였습니다. 는하지만 지금은 단지 스로틀 내 의견중 하나와 인증 된 사용자를 구분하고 '버스트'속도를 설정 으로 aswell 로그인 한 사용자 (예 : 분 당 5 개 요청) 과 '지속'속도 원 (예 : 하루에 100 개의 요청). 그것이 문서 (Django Throtte Docs)에 따라 필요하지 않습니다 나는 전혀 settings.py를 변경하지 않은장고의 한보기에서 두 개의 조절판 속도 설정

class SustainedAnon(AnonRateThrottle): 
    rate = '100/day' 

class BurstAnon(AnonRateThrottle): 
    rate = '6/minute' 

class SustainedUser(UserRateThrottle): 
    rate = '1000/day' 


class BurstUser(UserRateThrottle): 
    rate = '20/min' 

:

이 달성, 나는 4 스로틀 클래스를 만들었습니다. 내가 편집 한 유일한 파일이 내 통계 클래스에이 라인을 추가하는 내 views.py했다

class Statistics(APIView): 
    throttle_classes = (SustainedAnon, BurstAnon, SustainedUser, BurstUser) 

그것은 거의가 어떻게해야 무엇 않습니다. 통계 클래스를 제한하고 로그인 한 사용자와 익명 사용자를 별도로 지정하면 이지만은 정확하게 속도를 조절하지 않습니다. 로그인하지 않은 경우 앱은 6 개가 아닌 3 개 요청 후 20 개가 아닌 10 개 요청 후에 로그인을 시작합니다.
모든 스로틀 클래스에 cache-request-value를 설정했기 때문에 이러한 현상이 발생합니다 (로그인하지 않을 때 SustainedAnon과 BurstAnon이 호출됩니다.)
왜 그런 일이 일어나고 장고에게 '한 번만 스로틀 링'만 할 수 있습니까?

답변

0

documentation 상태 :

하는 API입니다 동시에 장소에서 여러 UserRateThrottles가있을 수 있습니다. 이렇게하려면 UserRateThrottle을 재정의하고 클래스마다 고유 한 "범위"를 설정하십시오.

즉, 사용중인 UserRateThrottle 각각에 대해 다른 범위를 구성해야합니다.

AnonRateThrottle에도 적용됩니다.

+0

나는 벌써 그렇게 해 봤지만, 하나의 뷰에만 두 개의 스콥을 추가하는 것이 불가능 해 보였으므로 하나의 뷰만을 스로틀 할 수는 없다. –

+0

물론 가능합니다. http://www.django-rest-framework.org/api-guide/throttling/#setting-the-throttling-policy는 특정보기에 하나의보기를 조절하는 방법을 알려줍니다. – Linovia

+0

감사합니다. 잘 처리되었습니다. –

관련 문제