Как настроить реакцию на ошибку в контроллере Turbogears2

Я использую Turbogears2 для разработки небольшого веб-приложения. И в некоторых моих "контроллерах" я хотел бы ответить клиенту, что json-объект с информацией об ошибке внутри вместо html-страницы следует стандартному шаблону страницы ошибок, потому что ajax-клиент может прочитать сообщение об ошибке и по-своему показать это.

1 ответ

Есть несколько способов добиться этого. Если он привязан только к какому-либо контроллеру, вы можете легко зарегистрировать для него оболочку контроллера (используя tg.hooks.wrap_controller) и вернуться JSON вместо простой ошибки, когда это необходимо. Оболочки контроллеров описаны на http://turbogears.readthedocs.org/en/latest/turbogears/hooks.html.

В противном случае другой вариант - использовать декоратор в функции контроллера для обнаружения ошибки. Это то, что также сделано tgext.crudпри сообщении об ошибках JSON через catch_errors пользовательский декоратор: https://github.com/TurboGears/tgext.crud/blob/master/tgext/crud/decorators.py

Решение для обертки контроллера, как правило, более мощное, так как его можно применять и к сторонним контроллерам. В противном случае вы можете даже угнать ErrorController в controllers/error.py вернуть JSON с помощью json.dumps (TurboGears возвращает ответ как есть, когда это строка или tg.Response пример).

Другие вопросы по тегам