Расскажу я вам, дорогие мои читатели, о замечательном веб-фреймворке 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.
Про шаблоны сказать особо нечего, рельсовая философия – писать питон код в них можно, хотя и не стоит, но для тестов удобно. А вот формы это другое дело, но это в следующий раз.
Спасибо за внимание.