在没有匹配路由时覆盖Falcon的默认错误处理程序



当Falcon(-Framework)找不到特定请求的路由时,返回404。如何覆盖此默认处理程序?我想用自定义响应来扩展处理程序。

当没有资源匹配时,默认的处理程序是path_not_found响应程序:

但正如您在falcon API的_get_responder方法中看到的那样,如果没有一些monkey补丁,就无法覆盖它。

据我所见,有两种不同的方法可以使用自定义处理程序:

  1. 子类API类,并覆盖_get_responder方法,以便它调用自定义处理程序
  2. 如果没有任何应用程序路由匹配,请使用与任何路由匹配的默认路由。您可能更喜欢使用接收器而不是路由,因此可以使用相同的函数捕获任何HTTP方法(GET、POST…)

我推荐第二种选择,因为它看起来更整洁。

你的代码看起来像:

import falcon
class HomeResource:
    def on_get(self, req, resp):
        resp.body = 'Hello world'
def handle_404(req, resp):
    resp.status = falcon.HTTP_404
    resp.body = 'Not found'
application = falcon.API()
application.add_route('/', HomeResource())
# any other route should be placed before the handle_404 one
application.add_sink(handle_404, '')

这里有一个更好的解决方案。

    def custom_response_handler(req, resp, ex, params):
        resp.status = falcon.HTTP_404
        resp.text = "custom text response"
    app = falcon.App()
    app.add_error_handler(HTTPRouteNotFound, custom_response_handler)

相关内容

  • 没有找到相关文章

最新更新