Скорее всего многие разработчики, отлаживающие большие проекты под локальным сервером разработки в App Engine, столкнулись с проблемой его однопоточности. Если на странице содержится куча внешних css, js файлов и картинок, ожидание ее загрузки может вывести из себя даже стойкого человека.
Мы рассмотрим способ выноса статического содержимого приложения Django для обслуживания его сторонним сервером на базе пакета SimpleHTTPServer.
Сначала создаем скрипт, который будет использован для старта обоих серверов:
python simplehttpserver.py & dev_appserver.py -d --datastore_path="dev_appserver.datastore" .
Создаем файл simplehttpserver.py со следующим содержимым:
try: import SimpleHTTPServer import SocketServer port = 9000 Handler = SimpleHTTPServer.SimpleHTTPRequestHandler httpd = SocketServer.TCPServer(("", PORT), Handler) httpd.serve_forever() except: pass
Исключение будет срабатывать в том случае, если порт уже занят (сервер запускается повторно). Далее напишем специальную функцию, которая будет принимать в своих параметрах объекты фреймворка Django HttpResponse и HttpRequest, и при необходимости перенаправлять браузер на сервер со статическим содержимым (если сервер запущен локально). Для повторного использования ее лучше вынести в отдельный файл (например, utils.py).
def goFast(request,response): developing = onDevelServer(request) if developing: for folder in ['images','css','js']: dir = 'http://localhost:9000/%s/' % folder response.content = response.content.replace('/%s/' % folder,dir) return response def onDevelServer(request): return request.META['SERVER_NAME'] == 'localhost'
Этот код выполняет замену в ответе адрес ‘/images/homepage_logo.png’ на ‘http://localhost:9000/images/homepage_logo.png’. Ну и в завершении, модифицируем функцию render_to_response:
from django.shortcuts import render_to_response as r2r from services.utils import goFast def render_to_response(template, ls): return goFast(ls['request'], r2r(template,ls))
Это все, теперь можно насладиться скоростью работы!
Октябрь 18, 2008 в 2:17 пп |
По моему намного проще и праильней использовать следующюю схему:
делаем файл settings_local.py и импортируем его в setting (стандартная джанговская схема, надеюсь Вы поняли о чем я)
добавляем этот файл в ignore в app.cfg
далее в settins_local прописываем MEDIA_URL = ‘url локального сервера который хостит статику проекта’
Берем лбой веб сервер и направляем его на статику нашего проекта
Все
PS. Естественно в шаблонах все пути к статике должны писаться через {{MEDIA_URL}}