19 марта 2012 г.

Новинки Django 1.4, day 6: Шаблон проекта

Продолжим начатую в прошлый раз тему про новую структуру приложений. Напомню, что теперь по-умолчанию manage.py находится на уровень выше, чем модуль проекта. Чтобы проиллюстрировать это, запустим ./manage.py startproject:
# создать проект blog в текущей директории
django-admin.py startproject blog
# blog
# blog/blog
# blog/blog/__init__.py
# blog/blog/settings.py
# blog/blog/urls.py
# blog/blog/wsgi.py
# blog/manage.py
# в 1.4 можно создать проект blog не в текущей, а любой другой директории
# Мы выбрали /home/futurecolors/stuff/
django-admin.py startproject blog /home/futurecolors/stuff/
# /home/futurecolors/stuff/
# /home/futurecolors/stuff/blog
# /home/futurecolors/stuff/blog/__init__.py
# ...
# /home/futurecolors/stuff/manage.py
За объяснением, для чего потребовалось выносить manage.py, обращайтесь к предыдущему посту. А сегодня мы расскажем про пользовательские шаблоны проектов и приложений, а также зачем в проекте появился файл wsgi.py

Свой шаблон проекта
Свершилось, теперь можно из коробки создавать свои собственные шаблоны проектов и приложений. То, для чего мы использовали собственный фабскрипт (батарейка tinned-django на github), а кто-то использовал PasteScript, теперь в какой-то мере можно сделать достаточно просто штатными средствами.

Создавать проект из шаблона можно разными способами:
# из папки
django-admin.py startproject --template=/home/my_project_template myproject
# из архива
django-admin.py startproject --template=/home/my_project_template.tgz myproject
# и даже из внешнего урла
django-admin.py startproject --template=https://github.com/amccloud/django-project-skel/zipball/master myproject
Последняя опция наиболее удобна, поскольку позволяет хранить свои шаблоны проектов, например, на гитхабе и разворачивать, скачивая zipball (последняя строчка из примера выше).

Вот парочка проектов, предоставляющих свои «django-сборки»:

https://github.com/xenith/django-base-template
Шаблон проекта на основе разработк mozilla

https://github.com/amccloud/django-project-skel/
Улучшенный стандартный шаблон от Andrew McCloud

У себя в студии планируем также использовать при создании новых проектов данную фичу, допилив предварительно наш tinned-django (пока что он сыроват, да и несовместим с 1.4 --template опцией).

При запуске команды генерации проекта все *.py-файлы интерпретируются как шаблоны, переменные заменяются соответствующими значениями из контекста. По умолчанию доступны project_name project_directory и secret_key, произвольные переменные можно передать в командной строке как --key=value.

Свой шаблон приложения
По схожему принципу работает создание приложений startapp:
# создаём приложение в текущей директории (старое поведение)
django-admin.py startapp myapp
# указываем папку, в которой создать приложение
django-admin.py startapp myapp ./apps
# шаблоны приложений тоже есть
django-admin.py startapp myapp --template=/home/fc/app.tgz
Это может быть полезно, если вы предпочитаете разбивать модуль с тестами на файлы, вместо единого tests.py, либо как-то иначе модифицируете приложения.

Улучшена поддержка WSGI
Серьёзно обновились доки по развёртыванию проектов c помощью WSGI, которых так не хватало. Например, появились материалы по uWSGI и gunicorn.

Вместе с этим теперь в структуре проекта присутствует файл wsgi.py примерно следующего содержания:
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
Это стандартное WSGI-приложение может пригодиться для подключения Django к другим WSGI-приложениям или включения сторонних middleware. А по-умолчанию его можно использовать для развёртывания через WSGI-совместимый вебсервер.

To be continued...
Релиз Django через 3 дня, а серия постов всё не кончается. Подписывайтесь на RSS ;)

Комментариев нет:

Отправить комментарий