Django 애플리케이션의 각 사용자는 부서와 연관되어 있으며 거의 모든 요청에는 부서 관련 처리가 관련되어 있습니다. 따라서 전체 응용 프로그램에서 부서 개체를 사용할 수있게 만들고 싶습니다.Django 미들웨어, 세션 및 캐싱 시작하기
이들 중 어느있는 경우, 취할 수있는 가장 적절한 방법은 다음과 같습니다
단순히 DB에서 관련 부서를 검색하고request
객체에 부착
request.department
로 말할
-
Django의
- 사용자가 로그인 할 때 세션에 부서를 배치 한 다음 장고의
request.session
인터페이스를 사용하여보기에서 해당 부서를 검색합니다.
AuthenticationMiddleware
처럼 현재 로그인 한 사용자는
request.user
에 있습니다. (예 :
here 및
here)
아직 장고의 캐싱 기능에 익숙하지는 않았지만 모든 요청에 대해 추가 DB 히트가 발생하지 않도록 사용자별로 단위를 캐시하고 싶습니다. 나는 그 Django's sessions provide built-in caching support을 참조하십시오. 또한 캐싱은 첫 번째 방법으로도 구현 될 수 있다고 생각합니다.
이런 종류의 작업에 사용자 정의 미들웨어 (위의 # 1)보다 세션 (위의 # 2)을 사용하는 것이 유리합니까? 미들웨어 접근법은 내부 API 관점에서 보면 깨끗해 보입니다. 그러나 이것이 세션이 설계된 것과 정확히 일치하는 것 같습니다. 아마도 이것을 사용하기 시작할 수있는 적절한 기회일까요?
어떤 안내해 주셔서 감사합니다.
감사합니다 ! 정말 도움이되었습니다. 세션 데이터에 대해 쿠키 기반 저장소를 사용하는 것이 유스 케이스의 종류입니까? 이것으로, 부서 자체를 쿠키에 저장하는 것입니다. 올바르게 이해하면 세션 데이터 캐싱이 불필요합니다. 모든 요청에 대해 클라이언트가 데이터를 보내고 서버에서 사용할 수 있습니다. – tino
@tino 예, 데이터가 매우 간단하고 캐싱을 망치고 싶지 않은 경우 쿠키 기반 세션 사용에는 몇 가지 중요한 제한 사항이 있습니다. 예를 들어 도메인 당 쿠키 크기가 4Kb로 제한되어 있으면보다 자세한 비교 정보를 찾을 수 있습니다 [여기] (http://stackoverflow.com/a/18240232/1255305).어쨌든 쿠키 기반 저장소를 사용하는 경우 사용자가 쿠키를 삭제하고 요청에 포함되지 않은 유스 케이스를 처리해야하며 해킹 당할 수 있으므로 쿠키에 개인 정보를 저장하지 않도록해야합니다 . –
알았습니다. 다시 한번 감사드립니다. 그리고 캐싱 예제도 잘 알고 있습니다. – tino