Пробуем Pylons, часть 1: install, db setup
Всякий человек естественно пытается облегчить себе жизнь. Программисты — ярко выраженное доказательство этого принципа. Так уж сложилось, что по ходу работы мне необходимо создавать множество мелких Web-приложений, для решения небольших текущих задач. Ну а поскольку использование PHP мне не доставляет удовольствия чисто эмоционально, я решил попробовать для этих целей Python.
Для начала был опробован очень неплохой пакет httpy, но его функциональность в области «усиленного облегчения жизни» явно очень аскетична. Услышав краем уха волшебное слово фреймворк (как это лучше всего перевести на русский?) я ринулся на «раскопки» этой информации.
В ходе опробования самых распространенных Python фреймворков я для себя остановился на Pylons.
Хочу сразу пояснить, что TurboGears я пока не рассматривал подробно, так как у них до сих пор нет версии для Python 2.5, а в Django до сих пор по моему дилетантскому мнению обладает слишком большим количеством «магии».
К плюсам Pylons можно отнести во-первых заимствование лучший идей мегамодного Rails, во-вторых очень высокая гибкость, выражающаяся в поддержке множества шаблонных движков, ORM и т.д. я надеюсь что в ходе изучения смогу попробовать многие их них изучив массу полезных инструментов.
Для начала, рассмотрим установку данного фреймворка. Проще всего это сделать используя скрипт easy_install (если он уже установлен в системе).
$easy_install Pylons
Для тех, чей доступ в интернет перекрыт злобными прокси-серверами, я бы порекомендовал установить переменную окружения HTTP_PROXY, равную URL прокси-сервера. По крайней мере, именно это решение позволило мне насладиться автоматической установкой Pylons.
Если скрипта easy_install у вас нет, то вам необохдимо скачать peak.telecommunity.com/dist/ez_setup.py и выполнить его следующим образом.
$ python ez_setup.py Pylons
Кроме установки базовых компонент Pylons, можно инсталлировать еще ряд дополнительных. Делается это командой:
$easy_install Pylons[компонент]
Где компонент может быть одним из следующих.
— pudge — поддержка сборки документации (подробности тут). Разработчики отмечают что часть инструментов данного проекта все еще находится в разработке и нестабильна.
— genshi, cheetah, kid — поддержка соответсвующих шаблонных движков (подробности тут)
— full — все вышеперечисленное
Обновить Pylons так же очень просто. Независимо от варианта установки, обновление делается одной командой:
$ easy_install -U Pylons
Хотя следует отметить, что у меня после обновления таким образом до 0.9.5 Pylons оказался поломан, но разбираться в чем была причина — честно говоря было лень, и переустановка решила все проблемы.
Кстати, для пользователей ОС для домохозяек рекомендуется включить в PATH каталог Scripts, расположенный в каталоге python. Это поможет проще использовать утилиту paster.
Теперь давайте опробуем работу свежеустановленного ферймворка на каком-нибудь конкретном примере.
В роли примера, пожалуй, выступит онлайновый телефонный справочник.
Для начала создадим пустой проект. Для этого необходимо перейти в каталог проектов и там выполнить команду:
$ paster create --template=pylons phones
После этого будет создана структура каталогов будущего проекта. Описывать ее подробно я не буду, так как это неплохо сделано в руководстве.
Для теста я использую обычно базу SQLite (хозяевам Python 2.5 уже повезло иметь ее в дистрибутиве, остальным придется доставить соответствующий пакет).
Настроим базу данных используемую нашим приложением. Для этого необходимо отредактировать файл development.ini в корне проекта, поменяв там значение параметра:
sqlalchemy.dburi = sqlite:///%(here)s/phones.db
Теперь приступим к созданию моделей. Модели можно редактировать прямо в файле __init__.py в каталоге phones/models
Предварительная версия модели выглядит так:
<pre>from sqlalchemy import *
from sqlalchemy.ext.assignmapper import assign_mapper
from pylons.database import create_engine
from pylons.database import session_context as ctx
meta = MetaData()
persons_table = Table('persons', meta,
Column('id', Integer, primary_key=True),
Column('name', String(40)),
Column('department', Integer, ForeignKey('departments.id')),
Column('email', String(40)),
Column('phone', String(16)),
Column('phone_int', String(6))
)
contacts_table = Table('contacts', meta,
Column('id', Integer, primary_key=True),
Column('type', Integer),
Column('contact', String(40)),
Column('person_id', Integer, ForeignKey('persons.id'))
)
departments_table = Table('departments', meta,
Column('id', Integer, primary_key=True),
Column('name', String(40))
)
class Person(object):
def __str__(self):
return "%s [%s]" % (self.name, self.department)
class Contact(object):
def __str__(self):
return self.contact
contact_mapper = assign_mapper(ctx, Contact, contacts_table)
person_mapper = assign_mapper(ctx, Person, persons_table, properties={'contacts':relation(Contact)})</pre>
Мы создаем три таблицы:
— persons — основная таблица с контактной информацией
— contacts — дополнительные контактные данные (если понадобится что-то нестандартное)
— departmens — таблица подразделений
Кроме того, создаем обеъкты для ORM, которые связываем с соответствующими таблицами функцией assign_mapper.
Теперь нам необходимо обеспечить развертывание данной базы при инсталляции приложения. Для этого в файл websetyp.py, находящийся в корне проекта необходимо добавить следующие строки:
<pre>import paste.deploy
from pylons.database import create_engine
import phones.models as model
def setup_config(command, filename, section, vars):
conf = paste.deploy.appconfig('config:' + filename)
conf.update(dict(app_conf=conf.local_conf, global_conf=conf.global_conf))
paste.deploy.CONFIG.push_process_config(conf)
uri = conf['sqlalchemy.dburi']
engine = create_engine(uri)
print "Connecting to database %s" % uri
model.meta.connect(engine)
print "Creating tables"
model.meta.create_all()</pre>
Теперь, если все сделано правильно, команда
$ paster setup-app development.ini
приведет к созданию нашей базы.
Продолжение статьи можно найти тут.
Все про українське ІТ в телеграмі — підписуйтеся на канал DOU
23 коментарі
Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.