Февраль 06, 2013
Как развернуть Pyramid-проект с SQLAlchemy и URL-менеджером

Фреймворк 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

Теги: ,
Добавить комментарий:
Комментариев: (0)
Опубликовать