Вопрос: как это лучше организовать и где поставить такой фильтр?
Спасибо за ответы!
> http://pypi.python.org/pypi/lovely.responsecache/1.0.0a1 ?
>
> 19 июня 2008 г. 2:09 пользователь Garanin Michael <gar...@m-lan.ru
> <mailto:gar...@m-lan.ru>> написал:
А у меня APP-это из ZODB, а остальные objN-из рсубд, поэтому очень
хочется кешировать треверс, хотя бы после APP.
Пока у меня два кандидата на "копание":
1) ловить IBeforeTraverseEvent на APP и там уже развилку делать
2) посмотреть в сторону namespace (как например сделан "++language++",
или "++skin++") думаю может там как-то вклиниться можно.
что скажете?
> Но вполне вероятно, что это окажется выгоднее, чем брать
> lovely.memcached и вручную
> прописывать в коде где что закешировать. Правда, это будут уже не
> результаты рендеринга,
> а просто какие-то места в коде.
> Ну а если используются паджелеты и вьюлеты - то они ведь на
> zope.contentprovider основаны.
> Когда куча вьюлетов с большими вычислениями - сам бог велел
> использовать это.
>
> 19 июня 2008 г. 2:49 пользователь Garanin Michael <gar...@m-lan.ru
> <mailto:gar...@m-lan.ru>> написал:
>
> я так понял, что для этого способа view надо писать по определённым
> правилам.
> вот только не хочется переделывать уже работающий код...
>
> > http://pypi.python.org/pypi/lovely.responsecache/1.0.0a1 ?
> >
> > 19 июня 2008 г. 2:09 пользователь Garanin Michael
> <gar...@m-lan.ru <mailto:gar...@m-lan.ru>
> > <mailto:gar...@m-lan.ru <mailto:gar...@m-lan.ru>>> написал:
и ещё, пробив тему в django, увидел что они помимо встроенного
кеширования цельных страниц очень восхищаются
возможностью кеширования частей страниц. там типа есть теги для шаблона
которыми можно помечать условно-статичные места. признают правда что не
очень это "красиво". и теперь я понял, что решение реализованное в
"lovely.responsecache" как раз решает туже самую задачу. но по моему
гораздо более "правильно" и проще.
P.S.
пришлось тут разбираться с django, и у меня сложилось впечатление, что
добавь туда zope.interface, zope.formlib, тестирование (недавно добавили
правда) и это будет очень смахивать на z3.
################################################################
class MyCacheBrowserPublication(BrowserPublication):
implements(IPublication)
def callObject(self, request, ob):
res = super(MyCacheBrowserPublication,
self).callObject(request, ob)
# тут 'вилка' для кеширования
return res + '<!-- from cache -->'
class CacheBrowserFactory(BrowserFactory):
def __call__(self):
request_class = component.queryUtility(
interfaces.IBrowserRequestFactory, default=BrowserRequest)
return request_class, MyCacheBrowserPublication
<publisher
name="BROWSER"
factory=".CacheBrowserFactory"
methods="GET POST HEAD"
mimetypes="*"
priority="5"
/>