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