Python Falcon 简明教程

Python Falcon - Request & Response

HTTP 协议指出,客户端向服务器发送一个 HTTP 请求,该请求中应用了某些业务逻辑,然后生成响应并将其重定向到客户端。如果在这两个之间进行同步传输,Python 框架会使用 WSGI 标准,而异步传输遵循 ASGI 标准。Falcon 支持这两种标准。

WSGI/ASGI 服务器在上下文数据中提供 Request 和 Response 对象。这些对象被响应者、钩子、中间件等用作参数。对于 WSGI 应用程序,它处理 falcon.Request 类的实例。在 ASGI 应用程序中,它表示 falcon.asgi.Request 类。虽然这两类不同,但它们被设计为具有相似的属性和方法,以便最大限度地减少混淆并实现更简单的移植。

Request

Request 对象表示 HTTP 请求。由于它是由服务器提供的,因此该对象不应由响应者方法直接实例化。此对象提供了以下属性和方法,供响应者、钩子和中间件方法在其中使用 -

  1. method - 请求的 HTTP 方法(例如,“GET”、“POST”等)

  2. host - 主机请求头字段

  3. port - 用于请求的端口。返回给定模式的默认端口(HTTP 为 80,HTTPS 为 443)

  4. uri - 请求的完全限定 URI。

  5. path - 请求 URI 的路径部分(不包括查询字符串)。

  6. query_string - 请求 URI 的查询字符串部分,不包括前面的“?”字符。

  7. cookies - 一个 name/value cookie 对的字典。

  8. content_type - Content-Type 标头或如果标头缺失,则为 None。

  9. stream - 一个用于读取请求正文的文件输入对象(如果存在)。该对象提供对服务器数据流的直接访问,不可寻址。

  10. bounded_stream - 用于流的类文件包装器

  11. headers - 来自请求的原始 HTTP 标头

  12. params - 请求查询参数名称到其值的映射。

  13. get_cookie_values(name) - 为命名 cookie 返回 Cookie 头中提供的所有值。cookies 属性的别名。

  14. get_media() - 以反序列化形式返回请求流。类似于 media 属性。

  15. get_param(name) - 以字符串形式返回查询字符串参数的原始值。如果 application/x-wwwform-urlencoded 媒体类型的 HTML 表单被 POST,Falcon 可以自动从请求正文中解析参数并将它们合并到查询字符串参数中。要启用此功能,请通过 App.req_optionsauto_parse_form_urlencoded 设置为 True。

Response

Response 对象表示服务器对客户端的 HTTP 响应。与 Request 对象一样,Response 对象也不应该由应答者直接实例化。

应答者、hook 函数或中间件方法通过访问以下属性和方法来操作该对象−

  1. status - HTTP 状态代码,例如“200 OK”。这可以被设置成 http.HTTPStatus 的成员、一个 HTTP 状态行字符串或字节字符串,或者一个 int。Falcon 为一些常见状态代码提供了许多常量,这些常量以 HTTP_ 前缀开头,例如 − falcon.HTTP_204

  2. media - 由通过 falcon.RequestOptions 配置的媒体处理程序支持的可序列化对象。

  3. text - 表示响应内容的字符串。

  4. body - text 的已弃用别名。

  5. data - 表示响应内容的字节字符串。

  6. stream - 表示响应内容的文件类似对象。

  7. content_length - 设置 Content-Length 头。在 text 或 data 属性未设置时,它手动设置内容长度。

  8. content_type - 设置 Content-Type 头。Falcon 对常见媒体类型预定义的常量包括 falcon.MEDIA_JSON、falcon.MEDIA_MSGPACK、falcon.MEDIA_YAML、falcon.MEDIA_XML、falcon.MEDIA_HTML、falcon.MEDIA_JS、falcon.MEDIA_TEXT、falcon.MEDIA_JPEG、falcon.MEDIA_PNG 和 falcon.MEDIA_GIF。

  9. append_header (name, value) - 设置或追加此响应的标头。用于设置 cookie。

  10. delete_header (name) - 删除先前为此响应设置的标头。

  11. get_header (name) - 检索给定标头的原始字符串值。

  12. set_cookie (name, value) - 设置响应 cookie。可以多次调用此方法以向响应添加一个或多个 cookie。

  13. set_header (name, value) - 将此响应的标头设置为给定值。

  14. set_stream (stream, content_length) − 设置流和内容长度。

  15. unset_cookie (name, domain=None, path=None) − 清除响应中的 cookie。此方法清除 cookie 的内容,并指示用户代理立即失效其自己的 cookie 副本。