Форум сайта python.su
добрый день!
имею опыт работ с Pylons,
для нового проекта решил использовать Pyramid.
не получается НАЧАТЬ… :-(
то есть, по документации вроде понятно, а вот все “до кучи” не могу сложить.
Есть ли какой-то практический пример (типа PylonsBook), в котором по шагам создается приложение?
Отредактировано (Март 14, 2011 15:34:45)
Офлайн
Вообще-то в официальной доке два туториала есть. Вот тут еще пример http://www.serverzen.net/2010/11/8/getting-started-with-pyramid-a-notes-application
Офлайн
PooHэти я видел.
Вообще-то в официальной доке два туториала есть. Вот тут еще пример http://www.serverzen.net/2010/11/8/getting-started-with-pyramid-a-notes-application
Офлайн
По работе с БД и формами - это все вынесено в отдельные проекты, смотрите например
- 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 - проблем не было.
Офлайн
ziro, спасибо, буду изучать.
есть еще пара вопросов, прошу ответить.
1. нужно сделать поддержку языка в URL. То есть, адрес имеет вид, /pagename - для языка по умолчанию, /ru/pagename - для языка русского, /en/pagename - для английского и т.д.
в Pylons это делал путем наследования класса Mapper и затем перегрузкой методов match, routematch.
как сделать подобное в Pyramid? (использую routes, не использую traversing)
2. в маршрутах Pylons было удобно прописать в маршруте контроллер, а название action бралось динамически. (как часть в URL)
как сделать подобное в маршрутах Pyramid? а то каждый вид отдельно прописывать совсем не удобно.
спасибо.
Отредактировано (Март 16, 2011 10:44:17)
Офлайн
brutkaВот если бы использовал traversal, то таких вопросов бы не было.
(использую routes, не использую traversing)
Офлайн
ZZZа конкретно? при всем уважении к Вашему рангу, прошу совета, а не флудаbrutkaВот если бы использовал traversal, то таких вопросов бы не было.
(использую routes, не использую traversing)
Офлайн
Да там все очень просто, если разобраться. Лучше всего конечно почитать официальную документацию, но для того, чтобы было понятно дальше на пальцах можно сказать так:
При траверсинге 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)
Офлайн
не получается пока понять траверсинг :(
из приведенного примера с языками понятно, а вот как это выйдет потом на VIEW - не пойму пока никак…
подскажите, пожалуйста, а маршрутами это не сделать - как в Pylons было?
или учить траверсинг пока не пойму - это однозначная рекомендация?
Отредактировано (Март 16, 2011 15:00:35)
Офлайн
Лучше учить - плюсов не очень чтобы много, но какие:
- Фасетная навигация - делается через ресурсы практически за пять минут;
- Поддержка встраиваемых приложений (как в джанге) - просто прописываешь в нужное место в дереве ресурсов корневой ресурс нужного приложения - делается настолько быстро - насколько быстро печатать умеете;
- доступ из шаблонов к любому ресурсу через корневой элемент - мелочь, а приятно - всегда доступна;
- позволяет эффективно смешивать реляционные и нереляционные БД и даже, при использовании интерфейсов, менять одни на другие - не то чтобы нужная вещь, но в хозяйстве пригодится;
- хорошая система ACL - позволяет навешивать разные ограничения доступа на любой объект или контейнер.
Офлайн