Python — Скелет Django-проектов
За вот уже 5 лет работы с джангой (с самого открытия код, ага) я уже столько раз делал ./manage.py startproject что уже и не счесть. И каждый раз это сопровождалось кучей рутинных операций типа настройки бд, созданием одних и тех же приложений. Первое время сама джанга менялась очень быстро и как-то это зафиксировать было практически нереально. К тому же фактически небыло инфраструктуры приложений, репозиториев и прочей обвязки. Но сейчас ситуация намного лучше.
Поэтому, представляю недавно собраный скелет типового джанго-сайта. Две команды и получается готовый сайт-со-страницами, готовый к навешиванию мясца.
Это не просто куча кода, но и некоторые решения из практики. Эти фичи я отметил по тексту жирненьким.
Репа с кодом: https://code.launchpad.net/~wiz/+junk/dbones
Лог работы: http://dumpz.org/25701/
Что внутри?
Весь проект лежит в системе управления версиями bzr. Сразу же, что избавляет от кучки «Initial import».
Используется virtualenv — система разграничения установленых пакетов и их версий. Это значит, что при обновлении системных либ (например) у вас не развалится (внезапно) работавший пару лет сайт. Внутри virtualenv свой питон, установлен уютненький pip, оболочка ipython и дебаггер ipdb.
Структура каталогов имеет смысл™, а не просто всё-в-куче, как это обычно бывает. сам джангопроект лежит в подкаталоге project, media лежит рядом, всякий хлам от virtualenv в venv.
В наличии скриптик buildenv.sh, который инициализирует venv, ставит туда все указаные в pip-reqs.txt питонопакеты и создаёт тестовую sqlite базу для разработчиков.
В media уже залиты css и js от проекта html5boilerplate, а в главный html-шаблон сайта встроены блоки и {{ SITE_MEDIA }}.
Урлы и settings уже настроены и готовы сразу к показу страничек и статики.
В "главном приложении" core есть моделька Pages с простенькими страницами, но она умеет их рендерить из всяких разных разметок (markdown, wiki, и другие).
Для остальных приложений заготовлен пакет apps, а для всякой внешней хрени пакет ext. Всякие мелочи жизни живут в utils.
Кстати о мелочах. При установке сразу ставится django-annoying, который настоятельно рекомендуется использовать при первой же возможности вместо изобретения велосипедов.
Для кэширования и сессий используется Redis. Что сразу же благоприятно сказывается на req/s. Ещё на него можно повесить работу с очередями задач celery, но это надо далеко не для каждого сайта и делается в общем-то одним pip install django-celery. Если у вас шаред хостинг или ещё как-то редис недоступен, то вам не повезло и придётся из settings убрать четыре строчки.
Для хранения настроек зависящих от места размещения используется settings_local.py который пытается импортироваться из главного.
Чего нету?
Я ещё не определился с системой тестирования. Штатная джанговская хороша, но nosetests лучше. Там штук пять вариантов интеграции и я пока не рассматривал особо.
Нет «поддержки» грядущего Django 1.3, но там довольно много изменений и может быть придётся даже перекапывать весь скелет под ноль.
Скорее всего я забыл что-то очень важное или упустил возможность применить немного магии для дальнейшей автонастройки, поэтому велкам в коменты.
Новые версии буду выкладывать по мере работы со своим “рабочим” проектом.
Поэтому, представляю недавно собраный скелет типового джанго-сайта. Две команды и получается готовый сайт-со-страницами, готовый к навешиванию мясца.
Это не просто куча кода, но и некоторые решения из практики. Эти фичи я отметил по тексту жирненьким.
Репа с кодом: https://code.launchpad.net/~wiz/+junk/dbones
Лог работы: http://dumpz.org/25701/
Что внутри?
Весь проект лежит в системе управления версиями bzr. Сразу же, что избавляет от кучки «Initial import».
Используется virtualenv — система разграничения установленых пакетов и их версий. Это значит, что при обновлении системных либ (например) у вас не развалится (внезапно) работавший пару лет сайт. Внутри virtualenv свой питон, установлен уютненький pip, оболочка ipython и дебаггер ipdb.
Структура каталогов имеет смысл™, а не просто всё-в-куче, как это обычно бывает. сам джангопроект лежит в подкаталоге project, media лежит рядом, всякий хлам от virtualenv в venv.
В наличии скриптик buildenv.sh, который инициализирует venv, ставит туда все указаные в pip-reqs.txt питонопакеты и создаёт тестовую sqlite базу для разработчиков.
В media уже залиты css и js от проекта html5boilerplate, а в главный html-шаблон сайта встроены блоки и {{ SITE_MEDIA }}.
Урлы и settings уже настроены и готовы сразу к показу страничек и статики.
В "главном приложении" core есть моделька Pages с простенькими страницами, но она умеет их рендерить из всяких разных разметок (markdown, wiki, и другие).
Для остальных приложений заготовлен пакет apps, а для всякой внешней хрени пакет ext. Всякие мелочи жизни живут в utils.
Кстати о мелочах. При установке сразу ставится django-annoying, который настоятельно рекомендуется использовать при первой же возможности вместо изобретения велосипедов.
Для кэширования и сессий используется Redis. Что сразу же благоприятно сказывается на req/s. Ещё на него можно повесить работу с очередями задач celery, но это надо далеко не для каждого сайта и делается в общем-то одним pip install django-celery. Если у вас шаред хостинг или ещё как-то редис недоступен, то вам не повезло и придётся из settings убрать четыре строчки.
Для хранения настроек зависящих от места размещения используется settings_local.py который пытается импортироваться из главного.
Чего нету?
Я ещё не определился с системой тестирования. Штатная джанговская хороша, но nosetests лучше. Там штук пять вариантов интеграции и я пока не рассматривал особо.
Нет «поддержки» грядущего Django 1.3, но там довольно много изменений и может быть придётся даже перекапывать весь скелет под ноль.
Скорее всего я забыл что-то очень важное или упустил возможность применить немного магии для дальнейшей автонастройки, поэтому велкам в коменты.
Новые версии буду выкладывать по мере работы со своим “рабочим” проектом.