LINUX.ORG.RU

python pyramid

 , ,


0

1

доброго времени суток. подскажите, можно ли сделать с помощью traversal навигацию таким образом:

class root(object):
    def __init__(self, request, key):
        self.request = request
        self.key = key        

    def __getitem__(self, key):
        self.key = key
        if 'user' == key:
            return User(self.request, key) 
        else:
            raise KeyError(key)   


class User(object):
    def __init__(self, request, key):
        self.request = request
        self.key = key     

    @view_config(name='some')
    def index(request):
        return Response('some ...')

при этом чтоб чтоб по url xxx.ru\user\some я бы получил в результате «some». т.е. чтоб «user» было частью url. или я вообще не правильно понимаю суть traversal? спасибо.



Последнее исправление: vkg2 (всего исправлений: 1)

Если не используешь ZODB, то забудь о траверсал, иначе это будет не траверсал, а пародия на траверсал (это моё ИМХО)

bismi
()
Ответ на: комментарий от bismi

пояснить можешь? или кинуть ссылку где об этом можно прочитать.

vkg2
() автор топика

ты делаешь диспатч средствами траверсал, естественно это не правильно

траверсал это когда у тебя есть дерево ресурсов, типа вложенного словаря (только оно хранится в бд, а не строится в коде как сейчас)

def get_root(request):
    root = {}
    root['organization'] = {}
    root['organization']['username1'] = User(id=1)
    root['organization']['department1'] = {}
    root['organization']['department1']['username2'] = User(id=2)
    return root
и когда ты заходишь по адресу /organization/username1, pyramid сам загрузит объект User(id=1) и передаст твоей вьюхе зарегестрированной для этого типа объекта типа так
@view_config(context=User)
def index(context, request):
    return Response(context.__class__.__name__)
здесь context будет обьект типа User

bismi
()
24 ноября 2012 г.
Ответ на: комментарий от bismi

спасибо за подробное разъяснение.

vkg2
() автор топика
Ответ на: комментарий от bismi

а стоит ли использовать zodb? в инете маловато материалов по этой базе. особенно по ее производительности. нашел только сравнение с sqllite, но это не серьезно, на мой взгляд. или может есть какие-то решения где помимо zodb можно подключить дополнительную БД...

vkg2
() автор топика
Ответ на: комментарий от vkg2

Смотри что я понял за это время.

1.Можно делать траверсал руками, как ты делал в 1 посте, составлять дерево в коде, но это не так задумывалось. изначально traversal появился одновременно с zodb, и заточен под нее, но можно заюзать traversal и с sql базой. есть два рабочих примера на данный момент. В любом случае, надо в базе хранить иерархию. Есть несколько способов делать это в sql:

а) самый простой adjacency list. Так поступает Kotti там есть таблица node, у нее есть колонки id и parent_id. Таблицы контент тайпов которые джойнятся на нее Траверсал грузит ноды по очереди. Таким образом эмулирется стиль работы zodb.

б)другой способ path enumeration Так поступает ptahcms тут грузится сразу нода по пути, а потом за раз ее предки(кажется так, разбираюсь щас с сорцами).

в) есть еще несколько способов, можно по своему что нибуть замутить

2.на zodb не стоит заморачиваться, старые зоперы прохавали как с ней жить, но рынок она не захватит, и sql не сместит.

bismi
()
Ответ на: комментарий от bismi

ого, kotti далеко вперед шагнула с тех пор как я ее смотрел последний раз.

спасибо,bismi !!!

vkg2
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.