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

Override Falcon's default error handler when no route matches

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

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

但是正如您在 falcon API 的 _get_responder 方法中看到的那样,如果不进行一些猴子修补,就无法覆盖它。

据我所知,有两种不同的方式来使用自定义处理程序:

  1. Subclass API class,并覆盖 _get_responder 方法,以便它调用您的自定义处理程序
  2. 如果 none 个应用程序匹配,则使用匹配任何路由的默认路由。您可能更喜欢使用 sink 而不是路由,因此您可以捕获具有相同功能的任何 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)