如何在Turbogears2控制器中自定义错误响应

时间:2014-03-10 07:28:20

标签: python turbogears2

我正在使用Turbogears2开发一个小型Web应用程序。在我的一些“控制器”中,我想在客户端响应一个带有错误信息的json对象而不是标准错误页面模板后面的html页面,因为ajax客户端可以读取错误消息并拥有它自己的方式显示它。

1 个答案:

答案 0 :(得分:1)

有多种方法可以实现这一目标。如果它只绑定到某个控制器,您可以轻松地为它们注册一个控制器包装器(使用tg.hooks.wrap_controller)并在需要时返回JSON而不是普通错误。控制器包装器记录在http://turbogears.readthedocs.org/en/latest/turbogears/hooks.html#controller-wrappers

否则另一个选择是使用控制器函数上的装饰器来捕获错误。通过tgext.crud自定义装饰器报告json错误时,catch_errors也会这样做:https://github.com/TurboGears/tgext.crud/blob/master/tgext/crud/decorators.py#L114

控制器包装器解决方案通常更强大,因为它也可以应用于第三方控制器。否则,您甚至可以使用ErrorController劫持controllers/error.py中的json.dumps以返回json(TurboGears会返回响应,因为它是字符串或tg.Response实例)。