Некоторые сомнения по поводу реализации пользовательских страниц ошибок в Web2Py - PullRequest
2 голосов
/ 06 марта 2010

Я пытаюсь реализовать декоратор для пользовательских страниц ошибок в web2py согласно одному из Гаити Тодос. Ref - http://web2py.com/AlterEgo/default/show/75

Я пытаюсь сохранить его как модуль в каталоге / modules, чтобы я мог импортируйте его в контроллеры и разместите декоратор соответствующим образом.

Я сохранил обработчик ошибок как /modules/onerror.py

, и я импортирую его так из контроллера, скажем (or.py) -

exec('from applications.%s.modules.onerror import onerror as onerror'
                                                       % request.application)

Объект HTTP не был доступен в onerror.py, поэтому я сделал -

from gluon.http import *

Но потом я прочитал, что объект запроса также недоступен для декоратор как в строке -

filename=os.path.join(request.folder,'views/errors/error%i.html'%status)

У меня есть некоторые сомнения -

  1. Является ли каталог / modules хорошим местом для хранения такого повторно используемого компонента?

  2. Модули в каталоге / modules автоматически загружаются как новый экземпляр web2py создан? Если так, как я могу получить к ним доступ в контроллер

  3. Есть ли способ передать объект запроса в этот декоратор из мой контроллер? Подсказки приветствуются.

Мой текущий onerror.py - http://paste.pocoo.org/show/186165/ То, как я пытаюсь использовать в контроллере - http://paste.pocoo.org/show/186167/

Дайте мне знать, если я делаю это неочевидным образом.

1 Ответ

1 голос
/ 10 марта 2010

Решено через список рассылки пользователей web2py.

Вы также можете использовать: onerror = load_import ('onerror'). Onerror

Объект HTTP не был доступен в onerror.py, поэтому я сделал - из gluon.http import *

Модули Python являются обычными модулями Python и в web2py. Они только видят ключевые слова Python, если вы не импортируете их. У web2py есть 5 специальных объектов (запрос, ответ, сессия, кэш, T), и ваше приложение имеет другие (дБ, аааа, круто) Поскольку они создаются при каждом запросе, они не может импортироваться модулем, они должны быть явно переданы функции в модуле. Имейте в виду, что хотя это неловко, это то, что другие структуры просят сделать все время для всех функций. web2py сохраняет это для моделей и контроллеров.

Но потом я понял, что объект запроса также недоступен для декоратор как в строке - имя файла = os.path.join (request.folder, "кажд / ошибки / ошибка % I.html '% статус) У меня есть некоторые сомнения - 1. Загружаются ли модули в каталоге / modules как новый экземпляр web2py создан? Если так, как я могу получить к ним доступ?

Нет. Это обычные модули Python. Вы должны импортировать их, чтобы использовать их.

  1. Есть ли способ передать объект запроса в этот декоратор из мой контроллер? Подсказки приветствуются.

Вам нужен мета-декоратор def meta_decoration (что-то): def actual_decorator (f, что-то = что-то): делай что хочешь() возврат f () return decorator @meta_decorator (запрос) def function_to_be_decorated (): return dict () В любом случае вам это не нужно декоратор. Посмотрите в route.examples.py для rout_onerror. Есть простой способ сделать то, что вы хотите.

...