Фреймворк Pyramid содержит разнообразные скаффолды, которые можно использовать для генерации проектов. Скаффолды имеют различные конфигурации, в зависимости от типа генерируемого приложения. При использовании скаффолда, мы получаем приложение в виде пакета, который в последствии легко расширять и распространять.
Во время написания заметки, у меня было следующее окружение:
- ОС Linux Gentoo;
- python 2.7.3;
- virtualenv 1.8.4;
- текущая версия pyramid 1.4
Подготовка
Начнем с того, что подготовим среду для нашего проекта. Сначала создадим для проекта виртуальное окружение. Это поможет изолировать наше приложение и избежать возможных конфликтов с системными пакетами.
virtualenv --no-site-packages pyramid_env
Активируем окружение:
source pyramid_env/bin/activate
Устанавливаем Pyramid:
easy_install pyramid
Генерация проекта
Следующий шаг заключается в генерации каркаса приложения. Во фреймворке Pyramid есть поддержка различных шаблонов скаффолдинга, но нам нужен "alchemy scaffold" для генерации приложения, использующего SQLAlchemy и URL-менеджер. Переходим в директорию, которая будет родительской для нашего проекта:
cd /path/to/projects_dir
И генерируем каркас приложения, используя команду "pcreate", указывая в качестве скаффолда "alchemy":
pcreate --scaffold=alchemy myproject
Теперь, когда каркас проекта сгенерирован, для упрощения разработки зарегистрируем его в рабочем пространстве как python egg. Для этого зайдем в директорию проекта и используем команду "setup.py develop":
cd myproject
python setup.py develop
В процессе выполнения команды, будут установлены все недостающие зависимости для проекта.
Попробуем запустить тесты, автоматически сгенерированные скаффолдом:
python setup.py test -q
В случае успешного запуска, выведется сообщение с примерно таким содержанием:
Ran 1 test in 0.130s
OK
Инициализируем базу данных. Убедившись, что мы находимся в директории проекта (с файлом development.ini внутри), выполним команду:
initialize_myproject_db development.ini
В процессе выполнения команды будет создана база данных (по умолчанию SQLite), и в директории проекта должен появиться файл myproject.sqlite.
Проверка
Важно заметить, что благодаря скаффолдингу, уже на данном этапе мы имеем хоть очень небольшое, но полностью рабочее приложение, готовое к запуску. Для проверки запуска приложения, выполним команду:
pserve development.ini --reload
Если запуск прошел успешно, будет выведено примерно такое сообщение:
Starting subprocess with file monitor
Starting server in PID 16548.
serving on http://0.0.0.0:6543
Откроем в браузере адрес http://0.0.0.0:6543 и убедимся, что проект развернут успешно, и по данному адресу открывается начальная автоматически сгенерированная страница:
Структура сгенерированного проекта:
В файле models.py можно ознакомиться со сгенерированным тестовым примером модели, использующей SQLAlchemy:
from sqlalchemy import (
Column,
Integer,
Text,
)
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import (
scoped_session,
sessionmaker,
)
from zope.sqlalchemy import ZopeTransactionExtension
DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
Base = declarative_base()
class MyModel(Base):
__tablename__ = 'models'
id = Column(Integer, primary_key=True)
name = Column(Text, unique=True)
value = Column(Integer)
def __init__(self, name, value):
self.name = name
self.value = value