2009-06-02 2 views
1

내 Django 앱은 다른 페이지를 렌더링하기 위해 자체 페이지 중 하나를로드해야합니다. urllib2 (Python 2.6으로 작업)를 사용하여 페이지를로드하려고하는데 이전 요청이 완료 될 때까지 더 새로운 요청이 차단 된 것처럼 보입니다.Django에서 자체 페이지를 요청할 수 없습니까?

디버그 모드에서 하나의 스레드 만 사용하는 장고에 문제가 있습니까? (나는 단순히 기본값 인 python manage.py runserver으로 실행하고있다). 그것을 다중 스레드에 요청하는 간단한 방법이 있습니까?

답변

6

실제로 dev 서버를 멀티 스레드로 만드는 방법은 없습니다. 몇 년 동안 django 프로젝트에 open ticket about this이 있었고 패치 (패치가 작동하는지 확인할 수있는 ;-)). 티켓은 관리 서버를 사용하여 배포하려는 사람들이 프로젝트를 원하지 않기 때문에 "디자인 결정이 필요함"으로 닫히거나 지연됩니다. 다중 스레드 인 경우 "비상시"일 수 있습니다. 관리 서버는 효율적이지 않으며 보안을 위해 강화되지 않기 때문에 다른 누군가가 프로덕션 환경을 실행할 수있는 가능성은 매우 위험합니다 ... 장고를 설치하면 전세계 보안 수준이 낮아서 평판이 좋지 않을 수도 있습니다 :-)

내 개인적인 경험으로, 프로덕션 환경과 같은 로컬 Apache 인스턴스를 실행하여 AJAX 또는 동시 요청을받을 수있는 다른 시나리오를 테스트했습니다.

요청 결과 만보고 서버 코드에 액세스 할 수 있으므로 약간의 리팩터링을 사용하여 페이지 출력 결과를 확인할 필요가 없도록하는 것이 좋습니다. HTTP를 통해 해당 페이지를 호출 할 수 있습니다. 실제 결과를 반환하는 함수를 작성하고 일반 HTTP보기에서 해당 함수를 호출하면됩니다. 이렇게하면 다른 모든 앱 코드도 서버 왕복없이 해당 함수를 호출 할 수 있습니다. 난 그냥 여기 내 해결 방법을 추가했습니다

+0

Django 자체가 실제로 스레드로부터 안전하다는 점을 제외하고는 (1.0 이후) 좋은 답변입니다. 다르게 경험했다면 문제는 거의 확실하게 코드에 있습니다 (스레드가 안전하지 않은 코드를 작성하는 것은 매우 쉽습니다). 이 "커뮤니티 위키"를 표시 했으므로 필자는 그 부정확성을 제거하기 위해 편집 할 것입니다. –

+0

Carl에게 감사드립니다 ... 실제로, 나는 장고에서 0.96부터 스레딩을 시도하지 않았기 때문에 약 1.0을 듣게되어 기쁩니다. –

+0

1.0 이후에도 장고에서 스레드 문제가 계속 발생합니다. 사물의 현재 상태를 보려면 http://code.djangoproject.com/wiki/DjangoSpecifications/Core/Threading 페이지를 잘 살펴 봐야합니다. 페이지가 무언가가 고쳐 졌다고 말하면 트렁크에서만 고칠 수 있고 실제로는 그 시점에서 해제되지 않을 수도 있습니다. 따라서 멀티 스레딩을 언급하는 티켓을 실제로 확인해야합니다. –

2

http 자체를 사용하지 마십시오. 테스트 서버가 아닌 실제 서버에서 작동 할 수도 있습니다. 대단히 비효율적 일 것입니다. 뷰는 파이썬 함수입니다.

물론 두 모델 모두에서 사용할 수있는 정상적인 모델과 별도의 템플릿 조각을 사용하는 것이 훨씬 더 좋습니다.

1

render_to_string을 사용하지 않는 이유는 무엇입니까?