강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của sh
sh

câu hỏi đã được viết

Hướng dẫn hoàn chỉnh về phát triển dịch vụ web Python/Django với React

Giới hạn số lượng lệnh gọi API tối đa cho mỗi người dùng/IP (Điều chỉnh)

Throttle 설정이 적용되지 않아요

Viết

·

426

0

안녕하세요! 강의 잘 듣고 있습니다.

 

DRF 최대 호출 횟수 제한 강의를 보고 적용해보기 위해서 

다음과 같이 settings.py를 수정하였는데 리퀘스트 제한이 걸리지 않습니다. 서버를 리스타트해봐도 해결이 안되는데 뭐가 문제일까요?

 

settings.py 소스코드 일부


REST_FRAMEWORK = {
'PAGE_SIZE': 20,
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
'DEFAULT_THROTTLE_CLASSES': [
'rest_framework.throttling.UserRateThrottle',
# 'rest_framework.throttling.AnonRateThrottle',
],
'DEFAULT_THROTTLE_RATES': {
'user': '3/day',
# 'anon': '3/day',
},
}

 

httpie Response 메시지

 

 

throttlereactthrottlingdjangodrfdockerpython

Câu trả lời 4

1

pyhub님의 프로필 이미지
pyhub
Người chia sẻ kiến thức

본 이슈가 잘 풀려가고 계신가요? :-)

장고 버전 3.2 라서 문제가 발생하지는 않을 듯 하구요. 뭔가 다른 부분이 있지 않을까 싶습니다.

아래와 같이 장고 3.2.x 에서 프로젝트를 생성하여, 위에서 보여드린 코드대로 아래와 같이 테스트해보았습니다.

정확히 4번째 요청에서 429 응답이 오고 있습니다.

잘 하고 계십니다. 화이팅입니다. :-)

0

sh님의 프로필 이미지
sh
Người đặt câu hỏi

버전을 바꿔서 시도해보니 그것도 아니라는 것을 확인하였고 결국 settings.py에 rest_framework.throttling 모듈이 임포트 되어 있었던 것이 문제였던 것으로 확인하였습니다. 

파이참 환경인데 따옴표 없이 광역 설정을 타이핑하다가 실수로 임포트해버린 것 같습니다... ^^;

도와주셔서 감사합니다!

0

sh님의 프로필 이미지
sh
Người đặt câu hỏi

이번에도 빠른 답변 주셔서 대단히 감사드립니다.

조언을 참고하여 문제를 곰곰히 생각해보니 Django(3.2.x 사용) 버전 차이로 인한 문제가 아닐까 생각했습니다.

DRF의 SimpleRateThrottle 클래스가 Django의 cache 인스턴스(`default_cache`)를 멤버 변수로 사용한다고 하셔서 혹시 몰라 3.0.x 버전과 3.2.x 버전의 소스 코드를 비교해보았는데 3.2.x 부터 `cache` 인스턴스를 구성하는 클래스가 대폭 바뀐 점이 보였습니다. 

(default cache obj를 프록시하는 클래스(DefaultCacheProxy)에서 ConnectionProxy의 인스턴스로 바뀜)

아마 이 부분에서 문제가 생긴 것으로 생각됩니다.

강의에서 사용하신 버전과 동일한 버전으로 Example 프로젝트를 생성하여 실행해보니 저도 잘 동작하는 것을 확인하였습니다. 

Throttle rate 문제는 아직 해결 못 했지만 실마리를 찾았으니 곧 해결할 것 같습니다. 

마이너 버전의 차이도 이런 차이가 난다는 것을 실감했네요...

 

덕분에 정말 많은 공부가 되고 있습니다.

감사합니다.

0

pyhub님의 프로필 이미지
pyhub
Người chia sẻ kiến thức

안녕하세요.

보여주신 내역으로 저도 아래와 같이 샘플 프로젝트를 만들어서 테스트를 해보았습니다. 뷰는 APIView를 상속받았으며, 디폴트 설정을 따르도록 했구요. settings 내에 디폴트 퍼미션 및 throttle classes/rates를 지정했습니다.

클라이언트 요청은 cli에서 하셔도 되고 웹브라우저 상에서 해보실 수도 있습니다. 웹브라우저로 접속해서 먼저 로그인 후에 API 요청을 해보면, 현재 rates가 3/day 이기에 정확히 4회 요청에서 아래와 같이 429 Too Many Requests 응답을 받고 있음을 확인했습니다.

혹시 다른 경로의 프로젝트를 구동 중인 건 아니신지, 모든 코드를 잘 저장하셨는 지 확인 부탁드리구요. 소스코드 편집기의 save all 메뉴를 활용하시면 좋습니다. 그리고 DRF 룰 적용을 위해 모든 뷰는 APIView를 상속받은 CBV이거나 (뷰셋도 포함), @api_view() 장식자가 적용된 FBV여야 합니다.

화이팅입니다. :-)

Hình ảnh hồ sơ của sh
sh

câu hỏi đã được viết

Đặt câu hỏi