Джанго не может http запрашивать свои собственные страницы? - PullRequest
1 голос
/ 02 июня 2009

В какой-то момент моему приложению Django нужно загрузить одну из своих страниц, чтобы отобразить другую страницу. Я пытаюсь использовать urllib2 (работает с Python 2.6) для загрузки страницы, но похоже, что новый запрос блокируется, пока первый не завершится.

Это проблема с Django, использующим только один поток в режиме отладки? (Я запускаю его просто по умолчанию python manage.py runserver). Есть ли простой способ задать многопоточность?

Ответы [ 4 ]

6 голосов
/ 02 июня 2009

На самом деле нет способа перевести dev-сервер в многопоточность. В течение двух лет в проекте django был открытый тикет об этом и патч (который вы могли бы попробовать внедрить, чтобы увидеть, работает ли он для вас ;-)). Билет закрывается или откладывается до «необходимого проектного решения», потому что проект не хочет, чтобы люди когда-либо развертывали его с использованием сервера управления ... если он многопоточный, они могут просто «в чрезвычайных ситуациях». Сервер управления неэффективен и не слишком ужесточен для безопасности, поэтому любой шанс, что кто-то может запустить производственную среду с ним, весьма опасен ... наличие django по всему миру развивает репутацию плохой безопасности: -)

Мой личный опыт состоял в том, чтобы запускать локальный экземпляр Apache, такой как моя производственная среда, для тестирования AJAX или других сценариев, когда вы можете получать параллельные запросы.

В вашем случае, поскольку вы просто ищете результаты запроса и имеете доступ к коду сервера, я бы порекомендовал немного провести рефакторинг, чтобы вы могли получить результаты вывода этой страницы без необходимости вызвать эту страницу через HTTP. Напишите функцию, которая возвращает фактический результат, и ваш обычный HTTP-просмотр просто вызывает эту функцию. Таким образом, любой другой код приложения может также вызывать эту функцию без обхода сервера.

2 голосов
/ 02 июня 2009

не пытайтесь использовать http для себя. даже если он запущен (может работать на реальных серверах, а не на тестовом); это было бы ужасно неэффективно. Представления - это просто функции Python, вызывайте их!

конечно, гораздо лучше иметь разумную модель и отдельный фрагмент шаблона, который вы можете использовать в обоих представлениях.

1 голос
/ 02 июня 2009

Почему бы просто не использовать render_to_string?

0 голосов
/ 07 апреля 2011

Я только что добавил свой обходной путь здесь:

http://code.djangoproject.com/ticket/3357#comment:26

Вы можете найти это полезным.

...