Расскажу я вам, дорогие мои читатели, о замечательном веб-фреймворке Pylons (язык Python). Непонятно почему он был так обделен вниманием на хабре. Постараюсь исправить такую несправедливость. Я считаю его лучшим и попытаюсь вам раскрыть многие его прелести.
Pylons создавался с оглядкой на популярные решения, так говорит нам wiki. Но по личному опыту скажу вам, что основные идеи были взяты из Ruby On Rails и улучшены!
Pylons активно использует внешние компоненты:
- ORM: SQLAlchemy, SQLObject, CouchDB
- Шаблоны: Mako, Genshi, Jinja2
- Вставка фрагментов HTML: WebHelpers
- Генераторы форм: FormAlchemy, FormEncode, ToscaWidgets
- Маршрутизация запросов: Routes
Работа с моделью
Практиковал только алхимию, по этому про неё и примеры.
Опишем нашу модель:
# Создадим Машу
user = User(name=u"Маша")
user.password = sha1("12345").hexdigest()
session.add(user)
# найдем Машу
masha = session.query(User).filter_by(name=u"Маша").first()
# Создадим пост
post = BlogPost(title=u"Мой первый пост", body="Я люблю печеньки",user = masha)
# добавим ключевое слово
post.keywords.append(Keyword(keyword='cookies'))
# удалим Машу
session.delete(masha)
# удалим всех, кто начинается на букву А, используя "продвинутую" алхимию
tUser = User.__table__
session.execute(tUser.delete().where(tUser.c.name.like(u'A%')))
Маршрутизация
Routes точная копия рельсового аналога. За исключением работы с поддоменами. Хотя я уверен это скоро появится и в других фреймворках.
Пример настройки маршрутов:
# именование
map.connect("user_info", "/users/:name/info", controller="account", action="info")
# submappers и префикс
with map.submapper(controller="blog", path_prefix="/blog/") as blog:
# использование regexp
blog.connect(R"{id:\d+}", action="show")
# REST-стиль
blog.connect("create", action="create", conditions=dict(method=["POST"]))
blog.connect("update", action="update", conditions=dict(method=["PUT"]))
Используем:
url_for("user_info", name="vlad") => "/users/vlad/info"
url_for(controller="blog", action="show", id="5") => "/blog/5"
P.S.
Про шаблоны сказать особо нечего, рельсовая философия – писать питон код в них можно, хотя и не стоит, но для тестов удобно. А вот формы это другое дело, но это в следующий раз.
Спасибо за внимание.