HTTP 实用程序 — Werkzeug 文档

来自菜鸟教程
Werkzeug/docs/2.0.x/http
跳转至:导航、​搜索

HTTP 实用程序

Werkzeug 提供了几个函数来解析和生成 HTTP 标头,这些功能在实现 WSGI 中间件或在较低级别上操作时非常有用。 所有这些功能也从请求和响应对象中公开。

日期时间函数

这些函数简化了 HTTP 上下文中的时间处理。 Werkzeug 在 UTC 中生成时区感知 datetime 对象。 将日期时间对象传递给 Werkzeug 时,它假定任何原始日期时间都采用 UTC。

在比较 Werkzeug 中的日期时间值时,您自己的日期时间对象也必须是时区感知的,或者您必须使 Werkzeug 中的值变得幼稚。

  • dt = datetime.now(timezone.utc) 获取 UTC 中的当前时间。
  • dt = datetime(..., tzinfo=timezone.utc) 创建一个 UTC 时间。
  • dt = dt.replace(tzinfo=timezone.utc) 通过假设它在 UTC 中使一个天真的对象知道。
  • dt = dt.replace(tzinfo=None) 使感知对象幼稚。


标头解析

以下函数可用于解析传入的 HTTP 标头。 由于 Python 不提供具有 RFC 2616 所需语义的数据结构,Werkzeug 实现了一些 单独记录的自定义数据结构


标题实用程序

以下实用程序可以很好地处理 HTTP 标头,但不会解析它们。 如果您正在处理条件响应,或者您想要代理任意请求但想要删除不支持 WSGI 的逐跳标头,它们将非常有用。 还有一个函数可以从解析的数据中创建 HTTP 标头字符串。


饼干

条件响应助手

对于条件响应,以下函数可能有用:


常数

werkzeug.http.HTTP_STATUS_CODES
状态代码 -> 默认状态消息对的字典。 这被包装器和其他地方使用,其中整数状态代码在整个 Werkzeug 中被扩展为字符串。


表单数据解析

Werkzeug 提供与请求对象分开的表单解析函数,以便您可以从普通的 WSGI 环境访问表单数据。

表单数据解析器当前支持以下格式:

  • 应用程序/x-www-form-urlencoded
  • 多部分/表单数据

当前不支持嵌套多部分 (Werkzeug 0.9),但任何现代 Web 浏览器都不使用它。

用法示例:

>>> from io import BytesIO
>>> from werkzeug.formparser import parse_form_data
>>> data = (
...     b'--foo\r\nContent-Disposition: form-data; name="test"\r\n'
...     b"\r\nHello World!\r\n--foo--"
... )
>>> environ = {
...     "wsgi.input": BytesIO(data),
...     "CONTENT_LENGTH": str(len(data)),
...     "CONTENT_TYPE": "multipart/form-data; boundary=foo",
...     "REQUEST_METHOD": "POST",
... }
>>> stream, form, files = parse_form_data(environ)
>>> stream.read()
b''
>>> form['test']
'Hello World!'
>>> not files
True

通常,WSGI 环境由 WSGI 网关提供,其中传入数据是其中的一部分。 如果你想为单元测试生成这样的假 WSGI 环境,你可能需要使用 create_environ() 函数或 EnvironBuilder 来代替。