Как настроить реакцию на ошибку в контроллере 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
пример).