Найти - Пользователи
Полная версия: Начало изучения Pyramid
Начало » Pyramid / Pylons / TurboGears » Начало изучения Pyramid
1 2 3 4
brutka
добрый день!
имею опыт работ с Pylons,
для нового проекта решил использовать Pyramid.
не получается НАЧАТЬ… :-(

то есть, по документации вроде понятно, а вот все “до кучи” не могу сложить.

Есть ли какой-то практический пример (типа PylonsBook), в котором по шагам создается приложение?
PooH
Вообще-то в официальной доке два туториала есть. Вот тут еще пример http://www.serverzen.net/2010/11/8/getting-started-with-pyramid-a-notes-application
brutka
PooH
Вообще-то в официальной доке два туториала есть. Вот тут еще пример http://www.serverzen.net/2010/11/8/getting-started-with-pyramid-a-notes-application
эти я видел.
наверное не полностью сформулировал свое непонимание.
непонимание того, чем Pyramid лучше Pylons.
Пройдя эти туториалы я не увидел ни помощников работы с формами, ни нормальной работы с базой (хотя бы как в том же руководстве PylonsBook).
ziro
По работе с БД и формами - это все вынесено в отдельные проекты, смотрите например

- https://bitbucket.org/sluggo/pyramid_sqla
- https://bitbucket.org/sluggo/akhet
- http://pypi.python.org/pypi/pyramid_formalchemy

Также есть отдельные посты

- http://cd34.com/blog/framework/using-pyramid-with-deform-to-editcreate-records-in-sqlalchemy-backed-database/
- http://cd34.com/blog/framework/pylons-1-0-to-pyramid-1-0a1/

Из личного опыта - успешно прикручивал sqlalchemy и mongodb, а также formencode - проблем не было.
brutka
ziro, спасибо, буду изучать.

есть еще пара вопросов, прошу ответить.
1. нужно сделать поддержку языка в URL. То есть, адрес имеет вид, /pagename - для языка по умолчанию, /ru/pagename - для языка русского, /en/pagename - для английского и т.д.
в Pylons это делал путем наследования класса Mapper и затем перегрузкой методов match, routematch.
как сделать подобное в Pyramid? (использую routes, не использую traversing)


2. в маршрутах Pylons было удобно прописать в маршруте контроллер, а название action бралось динамически. (как часть в URL)
как сделать подобное в маршрутах Pyramid? а то каждый вид отдельно прописывать совсем не удобно.

спасибо.
ZZZ
brutka
(использую routes, не использую traversing)
Вот если бы использовал traversal, то таких вопросов бы не было.
brutka
ZZZ
brutka
(использую routes, не использую traversing)
Вот если бы использовал traversal, то таких вопросов бы не было.
а конкретно? при всем уважении к Вашему рангу, прошу совета, а не флуда
ziro
Да там все очень просто, если разобраться. Лучше всего конечно почитать официальную документацию, но для того, чтобы было понятно дальше на пальцах можно сказать так:

При траверсинге path_info разбивается на части между слешами, по которым и происходит поиск вызываемого ресурса и вызываемой вьюшки. Например, если запрашивается путь “/a/b/c/”, то при траверсинге его пирамида разобъет на части и начнет поиск ресурса начиная с корневого контейнера (создается фабрикой, которая устанавливается при конфигурации предложения) последовательно по очень простому алгоритму, который можно представить так:

    resource = root
for part in ["a", "b", "c"]:
try:
resource = resource[part]
except KeyError:
# Следующий ресурс не найден - тогда это должна быть именованная вьюха, причем последняя в списке
# иначе выбросится исключение NotFound
# Ресурс найден - должна вызваться дефолтная вьюха
Это позволяет делать различные ухищрения, например для локализации по вашему способу можно сделать так:

class Root(dict):
"""
Это реальный корневой элемент системы
"""
def __init__(self):
super(Root, self).__init__(blogs=BlogContainer(), news=NewsContainer(), users=UserContainer())

class Localizer(obj):
"""
Это хитрый адаптер для поддержки локализации
"""
def __init__(self, request):
self.request = request

def __getitem__(self, key):
"""
Вот здесь реальная работа с локалью
"""
if key in ['en', 'ru', 'fr', 'it', 'de']:
request._LOCALE_ = key
return Root()

request._LOCALE_ = 'en'
return Root()[key]

def get_root(request):
"""
Это фабрика для создания корневого ресурса
"""
return Localizer(request)
brutka
не получается пока понять траверсинг :(

из приведенного примера с языками понятно, а вот как это выйдет потом на VIEW - не пойму пока никак…

подскажите, пожалуйста, а маршрутами это не сделать - как в Pylons было?

или учить траверсинг пока не пойму - это однозначная рекомендация?
ziro
Лучше учить - плюсов не очень чтобы много, но какие:
- Фасетная навигация - делается через ресурсы практически за пять минут;
- Поддержка встраиваемых приложений (как в джанге) - просто прописываешь в нужное место в дереве ресурсов корневой ресурс нужного приложения - делается настолько быстро - насколько быстро печатать умеете;
- доступ из шаблонов к любому ресурсу через корневой элемент - мелочь, а приятно - всегда доступна;
- позволяет эффективно смешивать реляционные и нереляционные БД и даже, при использовании интерфейсов, менять одни на другие - не то чтобы нужная вещь, но в хозяйстве пригодится;
- хорошая система ACL - позволяет навешивать разные ограничения доступа на любой объект или контейнер.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB