请求/响应对象¶
请求和响应对象包装了wsgi环境或wsgi应用程序的返回值,因此它是另一个wsgi应用程序(包装了整个应用程序)。
他们的工作方式¶
您的wsgi应用程序总是传递两个参数。wsgi“环境”和wsgi start_response 用于启动响应阶段的函数。这个 Request
类包装 environ 以便于访问请求变量(表单数据、请求头等)。
这个 Response
另一方面,您可以创建一个标准的WSGI应用程序。Werkzeug的简单“你好”世界如下:
from werkzeug.wrappers import Response
application = Response('Hello World!')
为了使其更有用,您可以用函数替换它并进行一些处理:
from werkzeug.wrappers import Request, Response
def application(environ, start_response):
request = Request(environ)
response = Response(f"Hello {request.args.get('name', 'World!')}!")
return response(environ, start_response)
因为这是一项非常常见的任务 Request
对象提供了一个帮助器。上面的代码可以这样重写:
from werkzeug.wrappers import Request, Response
@Request.application
def application(request):
return Response(f"Hello {request.args.get('name', 'World!')}!")
这个 application 仍然是接受环境和 start_response 可赎回的。
包装物的易变性和可重用性¶
Werkzeug请求和响应对象的实现正试图通过尽可能不允许某些事情来防止常见的陷阱。这有两个目的:高性能和避免陷阱。
对于请求对象,应用以下规则:
请求对象是不可变的。默认情况下不支持修改,但是,如果需要修改不可变属性,则可以用可变属性替换不可变属性。
请求对象可以在同一线程中共享,但本身不是线程安全的。如果需要从多个线程访问它,请在调用周围使用锁。
无法pickle请求对象。
对于响应对象,应用以下规则:
响应对象是可变的
响应对象可以在 freeze() 被叫来。
由于werkzeug 0.6,对于多个wsgi响应使用相同的响应对象是安全的。
可以使用 copy.deepcopy .
包装器类¶
- class werkzeug.wrappers.Request(environ, populate_request=True, shallow=False)¶
表示传入的WSGI HTTP请求,其标头和正文取自WSGI环境。具有使用各种HTTP规范定义的功能的属性和方法。Requests对象中的数据是只读的。
假定文本数据使用UTF-8编码,这对于绝大多数现代客户端应该是正确的。在Python中使用由客户端设置的编码是不安全的,因为它提供了额外的编码,例如
zip
。要更改假定的编码,请子类化并替换charset
。- 参数:
environ (WSGIEnvironment) -- WSGI环境由WSGI服务器生成,包含有关服务器配置和客户端请求的信息。
populate_request (bool) -- 将此请求对象添加到WSGI环境中,作为
environ['werkzeug.request']
。在调试时会很有用。shallow (bool) -- 使阅读从
stream
(以及从中读取的任何方法)引发RuntimeError
。对于防止在中间件中使用表单数据非常有用,因为这会使最终应用程序无法使用表单数据。
在 3.0 版本发生变更: 这个
charset
,url_charset
,以及encoding_errors
参数已删除。Changelog
在 2.1 版本发生变更: 年长的
BaseRequest
并删除了Mixin类。在 2.1 版本发生变更: 移除
disable_data_descriptor
属性。在 2.0 版本发生变更: 联合
BaseRequest
和混合到一个单一的Request
班级。在 0.5 版本发生变更: 对所有数据使用不可变的类强制使用只读模式。
- _get_file_stream(total_content_length, content_type, filename=None, content_length=None)¶
调用以获取文件上载的流。
这必须提供一个类似文件的类 read() , readline() 和 seek() 可写和可读的方法。
如果总内容长度大于500KB,则默认实现返回临时文件。因为许多浏览器不为文件提供内容长度,所以只有总内容长度才重要。
- property accept_charsets: CharsetAccept¶
此客户端支持的字符集列表
CharsetAccept
对象。
- property accept_languages: LanguageAccept¶
此客户端接受的语言列表
LanguageAccept
对象。
- property accept_mimetypes: MIMEAccept¶
此客户端支持的mimetype列表
MIMEAccept
对象。
- access_control_request_headers¶
与飞行前请求一起发送,以指示哪些标头将与跨源请求一起发送。设置
access_control_allow_headers
以指示允许哪些标头。
- access_control_request_method¶
与飞行前请求一起发送,以指示跨源请求将使用哪种方法。设置
access_control_allow_methods
在响应上指示允许哪些方法。
- classmethod application(f)¶
将函数装饰为接受请求作为最后一个参数的响应程序。这就像
responder()
但函数作为最后一个参数传递给请求对象,请求对象将自动关闭:@Request.application def my_wsgi_app(request): return Response('Hello World!')
自werkzeug 0.14起,HTTP异常将自动捕获并转换为响应,而不是失败。
- 参数:
f (t.Callable[[Request], WSGIApplication]) -- 可装饰的WSGI
- 返回:
一个新的wsgi可调用
- 返回类型:
WSGIApplication
- property args: MultiDict[str, str]¶
解析的URL参数(URL中问号后面的部分)。
默认情况下
ImmutableMultiDict
从该函数返回。这可以通过设置更改parameter_storage_class
换一种类型。如果表单数据的顺序很重要,则可能需要这样做。Changelog
在 2.3 版本发生变更: 无效字节保持百分比编码。
- property authorization: Authorization | None¶
这个
Authorization
将标头分析为Authorization
对象。None
如果标头不存在,则。Changelog
在 2.3 版本发生变更:
Authorization
不再是一个dict
。这个token
为使用令牌而不是参数的身份验证方案添加了属性。
- property cache_control: RequestCacheControl¶
A
RequestCacheControl
传入缓存控制头的对象。
- close()¶
关闭此请求对象的关联资源。这将显式关闭所有文件句柄。您还可以在WITH语句中使用请求对象,该语句将自动关闭它。
Changelog
在 0.9 版本加入.
- 返回类型:
None
- content_encoding¶
内容编码实体标题字段用作媒体类型的修饰符。当存在时,它的值指示哪些附加内容编码已应用于实体体,因此必须应用哪些解码机制才能获得内容类型标题字段引用的媒体类型。
Changelog
在 0.9 版本加入.
- property content_length: int | None¶
Content-Length实体标题字段以字节表示实体正文的大小,或者在Head方法的情况下,表示请求为get时发送的实体正文的大小。
- content_md5¶
在RFC1864中定义的Content-MD5实体标题字段是实体主体的MD5摘要,目的是提供实体主体的端到端消息完整性检查(MIC)。(注意:MIC有助于检测在传输过程中实体的意外修改,但不能抵御恶意攻击。)
Changelog
在 0.9 版本加入.
- content_type¶
Content-Type Entity Header字段表示发送给收件人的实体实体的媒体类型,如果是Head方法,则表示请求为get时本应发送的媒体类型。
- property cookies: ImmutableMultiDict[str, str]¶
A
dict
与请求一起传输的所有cookie的内容。
- property data: bytes¶
从其读取的原始数据
stream
。如果请求表示表单数据,则将为空。若要获取原始数据(即使它表示表单数据),请使用
get_data()
。
- date¶
日期常规头字段表示消息的开始日期和时间,其语义与RFC822中的原始日期相同。
Changelog
在 2.0 版本发生变更: DateTime对象是时区感知的。
- dict_storage_class¶
- environ: WSGIEnvironment¶
包含来自WSGI服务器的HTTP头和信息的WSGI环境。
- property files: ImmutableMultiDict[str, FileStorage]¶
MultiDict
包含所有上载文件的对象。每个密钥files
名字来自<input type="file" name="">
. 每一个值files
是WerkzeugFileStorage
对象。它的行为基本上类似于您从Python中了解的标准文件对象,不同之处在于它还具有
save()
可以将文件存储在文件系统上的函数。注意
files
仅当请求方法是post、put或patch以及<form>
发布到请求中的enctype="multipart/form-data"
. 否则它将是空的。见
MultiDict
/FileStorage
有关所用数据结构的更多详细信息的文档。
- property form: ImmutableMultiDict[str, str]¶
窗体参数。默认情况下
ImmutableMultiDict
从该函数返回。这可以通过设置更改parameter_storage_class
换一种类型。如果表单数据的顺序很重要,则可能需要这样做。请记住,文件上载不会在这里结束,而是在
files
属性。Changelog
在 0.9 版本发生变更: 在werkzeug 0.9之前,这只包含POST和PUT请求的表单数据。
- form_data_parser_class¶
FormDataParser
的别名
- classmethod from_values(*args, **kwargs)¶
根据提供的值创建新的请求对象。如果给定environ,则会从中填充缺少的值。当需要模拟来自URL的请求时,此方法对小脚本很有用。不要将此方法用于单元测试,有一个功能完整的客户端对象(
Client
)允许创建多部分请求、对cookie的支持等。这接受与
EnvironBuilder
.Changelog
在 0.5 版本发生变更: 此方法现在接受的参数与
EnvironBuilder
. 因为这个 environ 现在调用参数 environ_overrides.
- get_data(cache: bool = True, as_text: Literal[False] = False, parse_form_data: bool = False) bytes ¶
- get_data(cache: bool = True, as_text: Literal[True] = False, parse_form_data: bool = False) str
这将从客户端将缓冲的传入数据读取到一个字节对象中。默认情况下,这是缓存的,但是可以通过设置来更改该行为 cache 至 False 。
通常,不首先检查内容长度就调用此方法是一个坏主意,因为客户机可能会发送几十兆字节或更多的字节来导致服务器内存问题。
注意,如果表单数据已经被解析,那么这个方法不会返回任何内容,因为表单数据解析不会像这个方法那样缓存数据。隐式调用表单数据分析函数集 parse_form_data 到 True. 完成后,如果表单分析器处理数据,则此方法的返回值将为空字符串。这通常是不必要的,因为如果缓存了整个数据(这是默认值),表单分析器将使用缓存的数据来解析表单数据。在调用此方法之前,请注意首先检查内容长度,以避免耗尽服务器内存。
如果 as_text 设置为 True 返回值将是解码后的字符串。
Changelog
在 0.9 版本加入.
- get_json(force: bool = False, silent: Literal[False] = False, cache: bool = True) Any ¶
- get_json(force: bool = False, silent: bool = False, cache: bool = True) Any | None
解析
data
作为JSON。如果MIMETYPE未指示JSON (application/json ,见
is_json
),否则解析失败,on_json_loading_failed()
并将其返回值用作返回值。默认情况下,这将引发415不支持的媒体类型。- 参数:
force -- 忽略mimetype并始终尝试解析json。
silent -- 使MIMETYPE和分析错误静默,并返回
None
取而代之的是。cache -- 存储解析后的JSON以返回以进行后续调用。
Changelog
在 2.3 版本发生变更: 引发415错误,而不是400。
在 2.1 版本发生变更: 如果内容类型不正确,则引发400错误。
- headers¶
随请求一起接收的标头。
- property host: str¶
向其发出请求的主机名,如果端口是非标准的,则包括该端口。经过验证
trusted_hosts
。
- property if_modified_since: datetime | None¶
被解析的 If-Modified-Since 标头作为DateTime对象。
Changelog
在 2.0 版本发生变更: DateTime对象是时区感知的。
- property if_range: IfRange¶
被解析的
If-Range
标题。Changelog
在 2.0 版本发生变更:
IfRange.date
是时区感知的。在 0.7 版本加入.
- property if_unmodified_since: datetime | None¶
被解析的 If-Unmodified-Since 标头作为DateTime对象。
Changelog
在 2.0 版本发生变更: DateTime对象是时区感知的。
- input_stream¶
未经任何安全检查的原始WSGI输入流。
这是危险的使用。它不会阻止无限的溪流或阅读过去
content_length
或max_content_length
。使用
stream
取而代之的是。
- is_multiprocess¶
布尔是 True 如果应用程序由生成多个进程的wsgi服务器提供服务。
- is_multithread¶
布尔是 True 如果应用程序由多线程WSGI服务器提供服务。
- is_run_once¶
布尔是 True 如果应用程序在进程生存期内只执行一次。例如,CGI就是这样,但不能保证只执行一次。
- property json: Any | None¶
解析的JSON数据如果
mimetype
指示JSON (application/json ,请参见is_json
)。调用
get_json()
使用默认参数。如果请求内容类型不是
application/json
,这将引发415不支持的媒体类型错误。Changelog
在 2.3 版本发生变更: 引发415错误,而不是400。
在 2.1 版本发生变更: 如果内容类型不正确,则引发400错误。
- json_module = <module 'json' from '/usr/lib/python3.11/json/__init__.py'>¶
具有
dumps
和loads
与内置API匹配的函数json
模块。
- list_storage_class¶
ImmutableList
的别名
- make_form_data_parser()¶
创建表单数据分析器。实例化
form_data_parser_class
有一些参数。Changelog
在 0.8 版本加入.
- 返回类型:
- max_content_length: int | None = None¶
最大内容长度。这将转发到表单数据分析函数 (
parse_form_data()
)。当设置和form
或files
属性被访问,解析失败,因为传输的值超过了指定的值RequestEntityTooLarge
引发异常。Changelog
在 0.5 版本加入.
- max_form_memory_size: int | None = None¶
最大表单字段大小。这将转发到表单数据分析函数 (
parse_form_data()
)。当设置和form
或files
属性被访问,并且Post数据的内存中的数据长于指定的值ARequestEntityTooLarge
引发异常。Changelog
在 0.5 版本加入.
- max_form_parts = 1000¶
要分析的多部分部件的最大数量,传递给
form_data_parser_class
。分析包含超过此数量的部分的表单数据会引发RequestEntityTooLarge
。Changelog
在 2.2.3 版本加入.
- max_forwards¶
max forwards请求头字段提供了一种机制,其中包含跟踪和选项方法,以限制可以将请求转发到下一个入站服务器的代理或网关的数量。
- method¶
发出请求时使用的方法,例如
GET
。
- property mimetype: str¶
喜欢
content_type
,但不带参数(例如,不带字符集、类型等)且始终为小写。例如,如果内容类型为text/HTML; charset=utf-8
mimetype应该是'text/html'
.
- property mimetype_params: dict[str, str]¶
mimetype参数为dict。例如,如果内容类型为
text/html; charset=utf-8
参数是{{'charset': 'utf-8'}}
.
- on_json_loading_failed(e)¶
调用If
get_json()
失败并且不会被静默。如果此方法返回值,则将其用作
get_json()
。默认实现引发BadRequest
。- 参数:
e (ValueError | None) -- 如果解析失败,这是一个例外。会是
None
如果内容类型不是application/json
。- 返回类型:
Changelog
在 2.3 版本发生变更: 引发415错误,而不是400。
- origin¶
发出请求的主机。设置
access_control_allow_origin
在响应中指明哪些来源是允许的。
- parameter_storage_class¶
- property pragma: HeaderSet¶
pragma general header字段用于包括可能应用于请求/响应链上的任何收件人的特定于实现的指令。所有pragma指令都从协议的角度指定可选行为;但是,有些系统可能要求该行为与指令一致。
- referrer¶
referer[sic]请求头字段允许客户机为服务器的利益指定从中获取请求URI的资源的地址(uri)(“referer”,尽管头字段拼写错误)。
- remote_addr¶
发送请求的客户端的地址。
- remote_user¶
如果服务器支持用户身份验证,并且脚本受保护,则此属性包含用户身份验证的用户名。
- scheme¶
请求使用的协议的URL方案,例如
https
或wss
。
- server¶
服务器的地址。
(host, port)
,(path, None)
对于Unix套接字,或None
如果不知道的话。
- property stream: IO[bytes]¶
带有安全检查的WSGI输入流。此流只能使用一次。
使用
get_data()
以获取字节或文本形式的完整数据。这个data
属性仅在它们不表示表单数据时才包含完整字节。这个form
属性将在这种情况下包含已分析的表单数据。不像
input_stream
,这条小溪防止无限的小溪或阅读过去content_length
或max_content_length
。如果
max_content_length
已设置,则可以在以下情况下在流上强制执行wsgi.input_terminated
已经设置好了。否则,返回空流。如果在基础流(如太大的文件或无限流)耗尽之前达到限制,则不能安全地读取流的其余内容。根据服务器对此的处理方式,客户端可能会显示“连接重置”失败,而不是看到413响应。
Changelog
在 2.3 版本发生变更: 检查
max_content_length
先发制人,边读边读。在 0.9 版本发生变更: 即使首先访问了表单解析,也始终设置流(但可能会被使用)。
- trusted_hosts: list[str] | None = None¶
处理请求时的有效主机名。默认情况下,所有主机都是可信的,这意味着无论客户端说主机是什么,都将被接受。
因为
Host
和X-Forwarded-Host
恶意客户端可以将标头设置为任何值,建议设置此属性或在代理中实现类似的验证(如果应用程序在代理之后运行)。Changelog
在 0.9 版本加入.
- property user_agent: UserAgent¶
用户代理。使用
user_agent.string
以获取标头值。设置user_agent_class
归于…的子类UserAgent
以提供对其他属性或其他扩展数据的解析。Changelog
在 2.1 版本发生变更: 内置解析器已删除。集
user_agent_class
到一个UserAgent
子类从字符串中分析数据。
- property values: CombinedMultiDict[str, str]¶
A
werkzeug.datastructures.CombinedMultiDict
这种结合args
和form
.仅对于GET请求,
args
存在,而不是form
。Changelog
在 2.0 版本发生变更: 仅对于GET请求,
args
存在,而不是form
。
- class werkzeug.wrappers.Response(response=None, status=None, headers=None, mimetype=None, content_type=None, direct_passthrough=False)¶
表示带有正文、状态和标头的传出WSGI HTTP响应。具有使用各种HTTP规范定义的功能的属性和方法。
响应主体非常灵活,可以支持不同的用例。简单的形式是传递字节,或将编码为UTF-8的字符串。传递可迭代的字节或字符串使其成为流响应。生成器对于在内存中构建CSV文件或使用SSE(服务器发送的事件)特别有用。类似文件的对象也是可迭代的,尽管
send_file()
在这种情况下应该使用帮手。响应对象本身是一个可调用的WSGI应用程序。当被调用时 (
__call__()
)与environ
和start_response
,它会将其状态和标头传递给start_response
然后将其主体作为迭代器返回。from werkzeug.wrappers.response import Response def index(): return Response("Hello, World!") def application(environ, start_response): path = environ.get("PATH_INFO") or "/" if path == "/": response = index() else: response = Response("Not Found", status=404) return response(environ, start_response)
- 参数:
response (Iterable[str] | Iterable[bytes]) -- 响应正文的数据。用于固定长度响应的字符串或字节、或字符串或字节的元组或列表,或用于流响应的字符串或字节的任何其他可迭代。默认为空正文。
status (int | str | HTTPStatus | None) -- 响应的状态代码。可以是int(在这种情况下会添加默认状态消息),也可以是以下形式的字符串
{{code}} {{message}}
,就像404 Not Found
。默认为200。headers (Headers) -- A
Headers
对象,或一列(key, value)
将转换为Headers
对象。mimetype (str | None) -- 响应的MIME类型(不带字符集或其他参数的内容类型)。如果该值以
text/
(或匹配某些其他特殊情况),则将添加字符集以创建content_type
。content_type (str | None) -- 响应的完整内容类型。重写从
mimetype
。direct_passthrough (bool) -- 将响应体作为WSGI迭代直接传递。当正文是二进制文件或其他字节迭代器时,可以使用它跳过一些不必要的检查。使用
send_file()
而不是手动设置。
Changelog
在 2.1 版本发生变更: 年长的
BaseResponse
并删除了Mixin类。在 2.0 版本发生变更: 联合
BaseResponse
和混合到一个单一的Response
班级。在 0.5 版本发生变更: 这个
direct_passthrough
参数已添加。- __call__(environ, start_response)¶
将此响应作为wsgi应用程序处理。
- 参数:
environ (WSGIEnvironment) -- WSGI环境。
start_response (StartResponse) -- wsgi服务器提供的可调用响应。
- 返回:
应用程序迭代器
- 返回类型:
t.Iterable[bytes]
- _ensure_sequence(mutable=False)¶
此方法可以由需要序列的方法调用。如果 mutable 是的,它还将确保响应序列是标准的python列表。
Changelog
在 0.6 版本加入.
- 参数:
mutable (bool) --
- 返回类型:
None
- accept_ranges¶
这个 Accept-Ranges 标题。尽管名称将指示支持多个值,但它必须是一个字符串标记。
价值观
'bytes'
和'none'
很常见。Changelog
在 0.7 版本加入.
- property access_control_allow_credentials: bool¶
凭据是否可以由浏览器共享到JavaScript代码。作为飞行前请求的一部分,它指示凭据是否可以用于跨源请求。
- access_control_allow_headers¶
哪些标头可以与跨源请求一起发送。
- access_control_allow_methods¶
哪些方法可以用于跨源请求。
- access_control_allow_origin¶
源代码或“*”表示可能提出跨源请求的任何源代码。
- access_control_expose_headers¶
哪些标题可以由浏览器共享到JavaScript代码。
- access_control_max_age¶
可以缓存访问控制设置的最长时间(秒)。
- add_etag(overwrite=False, weak=False)¶
如果还没有,请为当前响应添加etag。
Changelog
在 2.0 版本发生变更: SHA-1用于生成值。MD5在某些环境中可能不可用。
- age¶
“期限响应头”字段传达发件人自源服务器上生成响应(或其重新验证)以来的估计时间。
年龄值是非负十进制整数,以秒为单位表示时间。
- property allow: HeaderSet¶
“允许实体头”字段列出由请求URI标识的资源所支持的一组方法。此字段的目的是严格通知收件人与资源相关的有效方法。405(不允许方法)响应中必须存在允许头字段。
- autocorrect_location_header = False¶
如果重定向
Location
Header是相对URL,使其成为绝对URL,包括方案和域。Changelog
在 2.1 版本发生变更: 这在默认情况下是禁用的,因此响应将发送相对重定向。
在 0.8 版本加入.
- automatically_set_content_length = True¶
如果可能,此响应对象是否应自动设置内容长度头?这在默认情况下是正确的。
Changelog
在 0.8 版本加入.
- property cache_control: ResponseCacheControl¶
“缓存控制常规头”字段用于指定请求/响应链上所有缓存机制必须遵守的指令。
- call_on_close(func)¶
在关闭响应时应调用的函数的内部列表中添加一个函数。由于0.7,此函数还返回已传递的函数,以便将其用作修饰器。
Changelog
在 0.6 版本加入.
- close()¶
如果可能,关闭包装响应。您还可以在WITH语句中使用该对象,WITH语句将自动关闭该对象。
Changelog
在 0.9 版本加入: 现在可以在WITH语句中使用。
- 返回类型:
None
- content_encoding¶
内容编码实体标题字段用作媒体类型的修饰符。当存在时,它的值指示哪些附加内容编码已应用于实体体,因此必须应用哪些解码机制才能获得内容类型标题字段引用的媒体类型。
- content_length¶
Content-Length实体标题字段表示发送给收件人的实体正文的大小(以十进制的八位字节为单位),或者,在Head方法中,表示请求为get时发送的实体正文的大小。
- content_location¶
当从请求的资源的URI之外的位置可以访问包含在消息中的实体时,可以使用内容位置实体标题字段为该实体提供资源位置。
- content_md5¶
在RFC1864中定义的Content-MD5实体标题字段是实体主体的MD5摘要,目的是提供实体主体的端到端消息完整性检查(MIC)。(注意:MIC有助于检测在传输过程中实体的意外修改,但不能抵御恶意攻击。)
- property content_range: ContentRange¶
这个
Content-Range
标题作为ContentRange
对象。即使未设置标题也可用。Changelog
在 0.7 版本加入.
- property content_security_policy: ContentSecurityPolicy¶
这个
Content-Security-Policy
标头作为ContentSecurityPolicy
对象。即使未设置标题也可用。内容安全策略头添加了额外的安全层,以帮助检测和减轻某些类型的攻击。
- property content_security_policy_report_only: ContentSecurityPolicy¶
这个
Content-Security-policy-report-only
标头作为ContentSecurityPolicy
对象。即使未设置标题也可用。Content Security Policy Report Only标头添加了一个csp策略,该策略未强制执行,但会报告该策略,从而帮助检测特定类型的攻击。
- content_type¶
Content-Type Entity Header字段表示发送给收件人的实体实体的媒体类型,如果是Head方法,则表示请求为get时本应发送的媒体类型。
- cross_origin_embedder_policy¶
防止文档加载任何未显式授予文档权限的跨域资源。值必须是
werkzeug.http.COEP
枚举。
- cross_origin_opener_policy¶
允许控制与跨区域文档共享浏览上下文组。值必须是
werkzeug.http.COOP
枚举。
- property data: bytes | str¶
调用的描述符
get_data()
和set_data()
.
- date¶
日期常规头字段表示消息的开始日期和时间,其语义与RFC822中的原始日期相同。
Changelog
在 2.0 版本发生变更: DateTime对象是时区感知的。
- default_status = 200¶
如果未提供,则为默认状态。
- delete_cookie(key, path='/', domain=None, secure=False, httponly=False, samesite=None)¶
删除cookie。如果密钥不存在,则自动失败。
- direct_passthrough¶
将响应体作为WSGI迭代直接传递。当正文是二进制文件或其他字节迭代器时,可以使用它跳过一些不必要的检查。使用
send_file()
而不是手动设置。
- expires¶
Expires Entity Header字段提供了将响应视为过期的日期/时间。过时的缓存项通常不能由缓存返回。
Changelog
在 2.0 版本发生变更: DateTime对象是时区感知的。
- classmethod force_type(response, environ=None)¶
确保WSGI响应是当前类型的响应对象。Werkzeug将使用
Response
在内部的许多情况下,就像例外一样。如果你打电话给get_response()
在例外的情况下,您将得到一个常规的Response
对象,即使您使用的是自定义子类也是如此。此方法可以强制执行给定的响应类型,并且如果提供了环境,它还会将任意的wsgi可调用文件转换为响应对象::
# convert a Werkzeug response object into an instance of the # MyResponseClass subclass. response = MyResponseClass.force_type(response) # convert any WSGI application into a response object response = MyResponseClass.force_type(response, environ)
如果您想在主调度器中发布进程响应并使用子类提供的功能,那么这尤其有用。
请记住,如果可能,这将在适当的位置修改响应对象!
- freeze()¶
使响应对象准备好进行酸洗。执行以下操作:
将响应缓冲到列表中,忽略
implicity_sequence_conversion
和direct_passthrough
。设置
Content-Length
标题。生成一个
ETag
标头(如果尚未设置)。
Changelog
在 2.1 版本发生变更: 删除了
no_etag
参数。在 2.0 版本发生变更: 一个
ETag
始终添加标题。在 0.6 版本发生变更: 这个
Content-Length
标头已设置。- 返回类型:
None
- classmethod from_app(app, environ, buffered=False)¶
从应用程序输出创建新的响应对象。如果您将一个始终返回生成器的应用程序传递给它,那么这种方法最有效。有时应用程序可能使用 write() 由返回的可调用 start_response 功能。这将尝试自动解决此类边缘情况。但是如果你没有得到预期的输出,你应该设置 buffered 到 True 它强制缓冲。
- get_app_iter(environ)¶
返回给定环境的应用程序迭代器。根据请求方法和当前状态代码,返回值可能是空响应,而不是响应中的响应。
如果请求方法是 HEAD 或者状态代码在HTTP规范要求空响应的范围内,返回空ITerable。
Changelog
在 0.6 版本加入.
- 参数:
environ (WSGIEnvironment) -- 请求的wsgi环境。
- 返回:
一个无法回答的问题。
- 返回类型:
t.Iterable[bytes]
- get_data(as_text: Literal[False] = False) bytes ¶
- get_data(as_text: Literal[True]) str
响应正文的字符串表示形式。无论何时调用此属性,都会对响应迭代进行编码和扁平化。如果您流式传输大数据,这可能会导致不必要的行为。
可以通过设置禁用此行为
implicit_sequence_conversion
到 False .如果 as_text 设置为 True 返回值将是解码后的字符串。
Changelog
在 0.9 版本加入.
- get_etag()¶
返回窗体中的元组
(etag, is_weak)
.如果没有etag,返回值为(None, None)
.
- get_json(force: bool = False, silent: Literal[False] = False) Any ¶
- get_json(force: bool = False, silent: bool = False) Any | None
解析
data
作为JSON。在测试期间很有用。如果mimetype未指示JSON (application/json ,请参见
is_json
),则返回None
。不像
Request.get_json()
,则不会缓存结果。- 参数:
force -- 忽略mimetype并始终尝试解析json。
silent -- 静默分析错误并返回
None
相反。
- get_wsgi_headers(environ)¶
这将在响应开始之前自动调用,并返回为给定环境修改的头。它从响应中返回头的副本,并在必要时应用一些修改。
例如,位置头(如果存在)与环境的根URL相联接。此外,对于某些状态代码,内容长度在此自动设置为零。
Changelog
在 0.6 版本发生变更: 以前调用过该函数 fix_headers 并在适当的位置修改响应对象。同样,从0.6开始,位置和内容位置标题中的虹膜也被正确处理。
另外,从0.6开始,如果Werkzeug能够自己计算出内容长度,它将尝试设置内容长度。如果响应iterable中的所有字符串都已编码并且iterable已被缓冲,则会出现这种情况。
- get_wsgi_response(environ)¶
以元组形式返回最终的wsgi响应。元组中的第一项是应用程序迭代器,第二项是状态,第三项是头列表。返回的响应是为给定环境专门创建的。例如,如果wsgi环境中的请求方法是
'HEAD'
响应将为空,并且只存在标题和状态代码。Changelog
在 0.6 版本加入.
- implicit_sequence_conversion = True¶
如果设置为 False 访问响应对象的属性不会尝试使用响应迭代器并将其转换为列表。
Changelog
在 0.6.2 版本加入: 以前调用过该属性 implicit_seqence_conversion .(注意拼写错误)。如果您确实使用了这个特性,那么您必须使代码适应名称更改。
- property is_sequence: bool¶
如果对迭代器进行缓冲,则此属性将 True .如果响应属性是列表或元组,那么响应对象将考虑缓冲迭代器。
Changelog
在 0.6 版本加入.
- property is_streamed: bool¶
如果对响应进行流式处理(响应不是具有长度信息的ITerable),则此属性为 True .在这种情况下,流意味着没有关于迭代次数的信息。这通常是 True 如果将生成器传递给响应对象。
这对于在应用某种不应对流式响应进行的后筛选之前进行检查很有用。
- iter_encoded()¶
iter用响应编码编码的响应。如果响应对象作为wsgi应用程序调用,则此方法的返回值将用作应用程序迭代器,除非
direct_passthrough
已激活。
- property json: Any | None¶
解析的JSON数据如果
mimetype
指示JSON (application/json ,请参见is_json
)。调用
get_json()
使用默认参数。
- json_module = <module 'json' from '/usr/lib/python3.11/json/__init__.py'>¶
具有
dumps
和loads
与内置API匹配的函数json
模块。
- last_modified¶
“上次修改的实体标题”字段指示源服务器认为变量上次修改的日期和时间。
Changelog
在 2.0 版本发生变更: DateTime对象是时区感知的。
- location¶
“位置响应头”字段用于将收件人重定向到请求URI以外的位置,以完成请求或标识新资源。
- make_conditional(request_or_environ, accept_ranges=False, complete_length=None)¶
使响应成为请求的条件。如果已经为响应定义了ETag,则此方法最有效。这个 add_etag 可以使用方法来执行此操作。如果不使用etag调用,则只设置日期标题。
如果请求或环境中的请求方法不是GET或HEAD,则此操作不起作用。
为了在处理范围请求时获得最佳性能,建议您的响应数据对象实现 seekable , seek 和 tell 方法如所述
io.IOBase
.返回的对象wrap_file()
自动实现这些方法。它不会移除响应主体,因为这是
__call__()
这个功能自动为我们服务。返回自我以便您可以
return resp.make_conditional(req)
但在适当的位置修改对象。- 参数:
request_or_environ (WSGIEnvironment | Request) -- 一个请求对象或wsgi环境,用于使响应成为有条件的。
accept_ranges (bool | str) -- 此参数指定 Accept-Ranges 标题。如果
False
(默认),则不设置标头。如果True
,它将被设置为"bytes"
。如果它是一个字符串,它将使用此值。complete_length (int | None) -- 将仅在有效范围请求中使用。它会设定 Content-Range 完整长度值和计算 Content-Length 实际价值。此参数对于成功完成范围请求是必需的。
- 加薪:
RequestedRangeNotSatisfiable
如果 Range 无法分析或满足头。- 返回类型:
Changelog
在 2.0 版本发生变更: 如果Length为0,则跳过范围处理,而不是引发416范围不可满足错误。
- make_sequence()¶
转换列表中的响应迭代器。默认情况下,如果需要,这会自动发生。如果 implicit_sequence_conversion 如果禁用,则不会自动调用此方法,并且某些属性可能会引发异常。这也会对所有项目进行编码。
Changelog
在 0.6 版本加入.
- 返回类型:
None
- max_cookie_size = 4093¶
如果Cookie标头超过此大小,则发出警告。缺省值4093应该是安全的 supported by most browsers 。仍将发送大于此大小的Cookie,但某些浏览器可能会忽略该Cookie或对其进行错误处理。设置为0可禁用此检查。
Changelog
在 0.13 版本加入.
- property mimetype_params: dict[str, str]¶
mimetype参数为dict。例如,如果内容类型为
text/html; charset=utf-8
参数是{{'charset': 'utf-8'}}
.Changelog
在 0.5 版本加入.
- response: Iterable[str] | Iterable[bytes]¶
要作为WSGI迭代发送的响应体。字符串或字节列表表示固定长度的响应,任何其他可迭代的都是流响应。字符串以UTF-8格式编码为字节。
不要设置为纯字符串或字节,这将导致发送响应的效率非常低,因为它将一次迭代一个字节。
- property retry_after: datetime | None¶
“响应后重试”头字段可与503(服务不可用)响应一起使用,以指示请求客户端预计该服务不可用的时间。
以秒为单位的时间,直到到期或日期。
Changelog
在 2.0 版本发生变更: DateTime对象是时区感知的。
- set_cookie(key, value='', max_age=None, expires=None, path='/', domain=None, secure=False, httponly=False, samesite=None)¶
设置Cookie。
如果cookie头的大小超过
max_cookie_size
,但仍将设置标题。- 参数:
key (str) -- 要设置的cookie的键(名称)。
value (str) -- cookie的值。
max_age (timedelta | int | None) -- 应该是几秒钟,或者 None (默认)如果cookie只应与客户端的浏览器会话一样长。
expires (str | datetime | int | float | None) -- 应该是 datetime 对象或Unix时间戳。
path (str | None) -- 将cookie限制为给定路径,默认情况下,它将跨越整个域。
domain (str | None) -- 如果您要设置跨域Cookie。例如,
domain="example.com"
将设置域可读的Cookiewww.example.com
,foo.example.com
否则,Cookie将只被设置它的域读取。secure (bool) -- 如果
True
,Cookie只能通过HTTPS获得。httponly (bool) -- 禁止JavaScript访问Cookie。
samesite (str | None) -- 将Cookie的范围限制为仅附加到“同一站点”的请求。
- 返回类型:
None
- set_data(value)¶
设置新字符串作为响应。值必须是字符串或字节。如果设置了字符串,则会将其编码为响应的字符集(缺省情况下为utf-8)。
Changelog
在 0.9 版本加入.
- property stream: ResponseStream¶
响应可作为只写流。
- property www_authenticate: WWWAuthenticate¶
这个
WWW-Authenticate
将标头分析为WWWAuthenticate
对象。修改对象将修改标头值。默认情况下不设置此标头。若要设置此标头,请分配
WWWAuthenticate
添加到此属性。response.www_authenticate = WWWAuthenticate( "basic", {"realm": "Authentication Required"} )
可以发送此标头的多个值,以便为客户端提供多个选项。分配一个列表以设置多个标头。但是,修改列表中的项不会自动更新标头值,访问此属性将只返回第一个值。
要取消设置此标头,请指定
None
或使用del
。Changelog
在 2.3 版本发生变更: 可以将此属性赋给以设置标头。可以分配一个列表来设置多个表头值。使用
del
要取消设置标题,请执行以下操作。在 2.3 版本发生变更:
WWWAuthenticate
不再是一个dict
。这个token
为使用令牌而不是参数的身份验证质询添加了属性。