falcon中间件中的错误处理

时间:2016-06-28 14:37:39

标签: python swagger falconframework

我正在为falcon框架实施swagger验证中间件。但是,请求失败会出现问题。

如果在响应者中或甚至在访问资源之前引发了falcon HTTP错误(例如在404 Not Found的情况下),则响应process_response中间件方法时,响应仍然具有状态代码200和空体

如果它是一个错误或功能,我无法取消它。

当我删除验证中间件时,一切都按预期工作。当有一个昂首阔步的验证中间件时,process_response中的所有响应都有状态码200,包括不成功。

我希望在HTTP 404,401,400等情况下跳过swagger验证/序列化响应。当响应来到process_response时,如果状态代码是,我如何发现错误被引发200?如何仅处理中间件中的成功响应?

此外,falcon在哪一点设置了正确的响应状态代码和正文?

python 3.5,falcon == 1.0.0

非常感谢任何帮助。

UPD:最小工作示例:

app.py

import falcon


class Validator:
    def process_resource(self, req, resp, resource, params):
        raise falcon.HTTPBadRequest("Too bad", "All requests are bad")

    def process_response(self, req, resp, resource):
        print(resp.status, resp.body)


class Resource:
    def on_get(self, req, resp):
        pass


application = falcon.API(middleware=[Validator()])
application.add_route('/test', Resource())

$ http http http://127.0.0.1:8000/test返回:

HTTP/1.1 400 Bad Request
Connection: close
Date: Tue, 28 Jun 2016 15:09:04 GMT
Server: gunicorn/19.6.0
content-length: 69
content-type: application/json; charset=UTF-8
vary: Accept

{
    "description": "All requests are bad",
    "title": "Too bad"
}

当网络应用打印200 OK None时。

0 个答案:

没有答案