Форум сайта python.su
Есть стандартный пример, описывающий работу с сессиями в nevow:
from twisted.application import service, strports
from nevow import appserver
from nevow import rend, loaders, tags as t, inevow
class RootPage(rend.Page):
addSlash = True
def display_session(self, ctx, data):
return inevow.ISession(ctx).uid
docFactory = loaders.stan(
t.html[t.head[t.title],
t.body]
)
application = service.Application('Foobar')
site = appserver.NevowSite(RootPage())
server = strports.service('8080', site)
server.setServiceParent(application)
В разных экземплярах браузеров uid разный, но в одном экземпляре в разных табах значения uid равны.
С этим можно как-то бороться?
Спасибо.
Отредактировано (Март 23, 2007 16:00:09)
Офлайн
Не воспроизводится.
Версии twisted, nevow, браузер, платформа?
У меня:
twisted-2.5.0+r19883
nevow-0.9.17+r11731
ff2 gecko/20061205/iceweasel/2.0.0.1
debian testing
Отредактировано (Март 24, 2007 07:48:36)
Офлайн
Сервер:
Платформа SunOS 5.9 sparc, python 2.5, twisted 2.5.0, nevow 0.9.17
или
WinXP, cygwin, python 2.5(cygwin), nevow 0.9.18, twisted 2.5.0
или даже
WinXP, python 2.4.4(win), nevow 0.9.18, twisted 2.4.0
Клиент:
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
или
Opera 9.10 Build 8679
Даже теряюсь…
Отредактировано (Март 25, 2007 06:10:43)
Офлайн
Домашняя машина:
Ноут, Ubuntu 6.06, python 2.4.3, nevow 0.9.17, twisted 2.5.0.
Проверено на Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.10) Gecko/20070302 Ubuntu/dapper-security Firefox/1.5.0.10 и links 1.00pre12.
Кстати, запускаю
twistd -noy fileName.py
uid сессий равны даже для разных экземпляров одного броузера, не только в разных табах.
А вот для разных браузеров одновременно и юиды не равны.
Отредактировано (Март 25, 2007 07:32:00)
Офлайн
jan2aryВот это правильное поведение. Это ж uid сессии. Сессия одна и та же. Это ж не uid запроса или ответа.
uid сессий равны даже для разных экземпляров одного броузера, не только в разных табах.
А вот для разных браузеров одновременно и юиды не равны.Тоже правильно. Они же куки в разных местах хранят.
Офлайн
Тогда, наверное, я не в ту сторону смотрю.
Хочу чтобы введенные данные никак не влияли на соседние табы, вдруг пользователю захочется делать одну операуию паралелльно в нескольких табах с разными данными. Например, если я работаю с данными в словаре data объекта типа form, то чтобы этот словарь был уникален для каждого таба. Даже скорее не сам этот словарь, а его копия, из которой при рендеринге странички будет загружаться data.
Если излагаю путано, позже запостю укороченный вариант формы.
Спасибо.
Офлайн
У Nevow есть очень кривая штука: форма обрабатывается только в Page. Сделать так, чтобы форма рендерилась и обрабатывалась во фрагменте нельзя.
Подробности с кодом см. здесь
В нормальных инструментах обработка форм никак не связана с сессиями. В моем коде используется сессия потому, что я не нашел нормального способа передать данные из Page (где форма обрабатывается) в Fragment (где она рендерится).
В догонку:
Следущий момент, который заслуживает отдельного внимания, потому что я достаточно долго бился с ним. Формы. Уже во “Введении в Nevow” я обозначил некоторые проблемы Nevow-инструментов для обработки форм. Так вдобавок, ни formless, ни formal не имеют документации вообще, только примеры, причем с использованием nevow.loaders.stan. Но это еще не все. Обработка форм настолько кривая, что мне пришлось хачить ее для своего случая. Я не хочу особо вдаваться в подробности, лишь кратко скажу, что форма отрисовывается в фрагменте, а обрабатывается в странице, содержащей этот фрагмент. Ну и из-за абсолютно глупых ограничений, мне пришлось использовать механизм сессий, хотя в Django и Pylons я вполне успешно обошелся без них.
Отредактировано (Март 25, 2007 10:58:51)
Офлайн