2013-09-03 2 views
0

다음과 같은 문제점이 있습니다. 내가 django 어떤 종류의 설치/teardown 각 요청에 추가하고 싶습니다. 예를 들어 사용자 요청 당 시작 부분에 시작 데이터 수집을 수집하고 요청이 끝날 때 모든 데이터를 데이터베이스 (1)로 덤프하려고합니다.장고 부트 스트랩/미들웨어/엔터 탈퇴

미들웨어의 시작 부분에서 객체가 (싱글 톤과 같이) 인스턴스화되고, 코드의 다른 모든 부분이이 객체를 가져올 수 있으며, 그 메소드를 사용하고 응답을 반환하기 전에 동일한 미들웨어가 객체를 스크랩합니다. . 내가 가진 유일한 관심사는 쓰레드 세이프 (threadafe safe)가되는 것인데, 글로벌 dict을 만들고, url + session_id 해시를 기반으로 키를 등록하거나 객체 ID (내부 파이썬 객체 ID, 어쩌면 좋은 방법 일까? 요청 키의 끝에는 dict에서 스크랩됩니다.

모든 권고, 생각, 아이디어는?

이 같은 직접 또는 아무것도 DB에 접근 할 수없는 이유 (1) 묻지 마십시오. 이것은 단지 하나의 예일뿐입니다. 종료하지만 코드에서 어떤 장소에서 수입하고 안전하게 사용할 수있는 현명한 요청 - 응답을 입력처럼 내가 뭔가에 대한 일반적인 생각을 찾고 있어요.

답변

1
  1. , 당신은 유지하고 request.META 딕셔너리에 넣어하려는 데이터에 대한 새로운 개체를 만들 수 있습니다. 언제든지 request을 사용할 수 있습니다. 이 경우에는 각 요청이 새로운 객체를 생성 할 때 스레드 안전성에 대해 걱정할 필요가 없다고 생각합니다.

  2. 요청 처리가 시작될 때 한 번만 데이터 개체를 만들려면 요청 처리 후 다른 코드가이 데이터를 참조하지 않고 삭제하면 request_started and request_finished 신호를 볼 수 있습니다.

+0

신호 내가 무엇을 찾고 아마도. 나는 그것을주고 사후에 업데이트 할 것이다. – Drachenfels

0

미들웨어는 매우 분명 스레드 안전하지 않습니다. 미들웨어 객체 나 전역 네임 스페이스에 요청 당 하나도 저장할 수 없습니다.

이 작업을 수행하는 일반적인 방법은 물건의 종류가 요청 객체에 그것을 주석하는 것입니다. 미들웨어와 뷰는이 기능에 액세스 할 수 있지만 다른 곳으로 가져 오려면 (예 : 모델에서) 전달해야합니다. 미들웨어에서

관련 문제