WSGI 助手 — Werkzeug 文档
WSGI 助手
以下类和函数旨在更轻松地使用 WSGI 规范或在 WSGI 层上进行操作。 该模块的所有功能都可以在高级 请求/响应对象 上使用。
迭代器/流助手
这些类和函数简化了 WSGI 应用程序迭代器和输入流的工作。
环境帮手
这些函数在 WSGI 环境中运行。 他们提取有用的信息或执行常见的操作:
便利帮手
字节、字符串和编码
HTTP 请求中的值以表示(或编码为)ASCII 的字节形式出现。 WSGI 规范 (PEP 3333) 决定始终使用 str
类型来表示值。 为此,使用 ISO-8859-1 字符集对原始字节进行解码以生成字符串。
WSGI 环境中的字符串仅限于 ISO-8859-1 代码点。 如果从环境中读取的字符串可能包含该字符集之外的字符,则必须首先将其解码为 ISO-8859-1 字节,然后使用正确的字符集(通常为 UTF-8)编码为字符串。 写入环境时,情况正好相反。 这被称为“WSGI 编码之舞”。
Werkzeug 提供了自动处理此问题的函数,因此您无需了解内部工作原理。 使用此页面上的函数以及 EnvironHeaders()
从 WSGI 环境中读取数据。
应用程序应避免手动创建或修改 WSGI 环境,除非它们处理正确的编码或解码步骤。 Werkzeug 中的所有高级接口都将根据需要应用编码和解码。
原始请求 URI 和路径编码
环境中的PATH_INFO
是百分比解码后的路径值。 例如,原始路径 /hello%2fworld
将从 WSGI 服务器到 Werkzeug 显示为 /hello/world
。 这会丢失斜杠是原始字符而不是路径分隔符的信息。
WSGI 规范(PEP 3333)没有提供获取原始值的方法,因此无法在路径中路由某些类型的数据。 解决此问题的最兼容方法是在查询字符串而不是路径中发送有问题的数据。
然而,许多 WSGI 服务器添加了一个带有原始路径的非标准环境键。 为了匹配这种行为,Werkzeug 的测试客户端和开发服务器会将原始值添加到 REQUEST_URI
和 RAW_URI
键。 如果要根据这个值进行路由,可以在到达应用程序之前使用中间件替换environ中的PATH_INFO
。 但是,请记住,这些密钥是非标准的,不能保证存在。