请求/响应对象

请求和响应对象包装了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请求和响应对象的实现正试图通过尽可能不允许某些事情来防止常见的陷阱。这有两个目的:高性能和避免陷阱。

对于请求对象,应用以下规则:

  1. 请求对象是不可变的。默认情况下不支持修改,但是,如果需要修改不可变属性,则可以用可变属性替换不可变属性。

  2. 请求对象可以在同一线程中共享,但本身不是线程安全的。如果需要从多个线程访问它,请在调用周围使用锁。

  3. 无法pickle请求对象。

对于响应对象,应用以下规则:

  1. 响应对象是可变的

  2. 响应对象可以在 freeze() 被叫来。

  3. 由于werkzeug 0.6,对于多个wsgi响应使用相同的响应对象是安全的。

  4. 可以使用 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 版本发生变更: 这个 charseturl_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,则默认实现返回临时文件。因为许多浏览器不为文件提供内容长度,所以只有总内容长度才重要。

参数:
  • total_content_length (int | None) -- 请求中所有数据的总内容长度。这个值保证在那里。

  • content_type (str | None) -- 上载文件的mimetype。

  • filename (str | None) -- 上载文件的文件名。可能是 None .

  • content_length (int | None) -- 此文件的长度。通常不提供此值,因为WebBrowser不提供此值。

返回类型:

IO[bytes]

property accept_charsets: CharsetAccept

此客户端支持的字符集列表 CharsetAccept 对象。

property accept_encodings: Accept

此客户端接受的编码列表。HTTP术语中的编码是压缩编码,如gzip。对于字符集,请看一下 accept_charset .

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 在响应上指示允许哪些方法。

property access_route: list[str]

如果存在转发头,这是从客户端IP到最后一个代理服务器的所有IP地址的列表。

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 base_url: str

喜欢 url 但是没有查询字符串。

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

ImmutableMultiDict 的别名

environ: WSGIEnvironment

包含来自WSGI服务器的HTTP头和信息的WSGI环境。

property files: ImmutableMultiDict[str, FileStorage]

MultiDict 包含所有上载文件的对象。每个密钥 files 名字来自 <input type="file" name=""> . 每一个值 files 是Werkzeug FileStorage 对象。

它的行为基本上类似于您从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.

返回:

请求对象

参数:
  • args (Any) --

  • kwargs (Any) --

返回类型:

Request

property full_path: str

请求的路径,包括查询字符串。

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

这将从客户端将缓冲的传入数据读取到一个字节对象中。默认情况下,这是缓存的,但是可以通过设置来更改该行为 cacheFalse

通常,不首先检查内容长度就调用此方法是一个坏主意,因为客户机可能会发送几十兆字节或更多的字节来导致服务器内存问题。

注意,如果表单数据已经被解析,那么这个方法不会返回任何内容,因为表单数据解析不会像这个方法那样缓存数据。隐式调用表单数据分析函数集 parse_form_dataTrue. 完成后,如果表单分析器处理数据,则此方法的返回值将为空字符串。这通常是不必要的,因为如果缓存了整个数据(这是默认值),表单分析器将使用缓存的数据来解析表单数据。在调用此方法之前,请注意首先检查内容长度,以避免耗尽服务器内存。

如果 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 host_url: str

仅请求URL方案和主机。

property if_match: ETags

包含中所有etag的对象 If-Match 标题。

返回类型:

ETags

property if_modified_since: datetime | None

被解析的 If-Modified-Since 标头作为DateTime对象。

Changelog

在 2.0 版本发生变更: DateTime对象是时区感知的。

property if_none_match: ETags

包含中所有etag的对象 If-None-Match 标题。

返回类型:

ETags

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_lengthmax_content_length

使用 stream 取而代之的是。

property is_json: bool

检查mimetype是否指示json数据,或者 application/jsonapplication/*+json .

is_multiprocess

布尔是 True 如果应用程序由生成多个进程的wsgi服务器提供服务。

is_multithread

布尔是 True 如果应用程序由多线程WSGI服务器提供服务。

is_run_once

布尔是 True 如果应用程序在进程生存期内只执行一次。例如,CGI就是这样,但不能保证只执行一次。

property is_secure: bool

True 如果请求是使用安全协议(HTTPS或WSS)发出的。

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'>

具有 dumpsloads 与内置API匹配的函数 json 模块。

list_storage_class

ImmutableList 的别名

make_form_data_parser()

创建表单数据分析器。实例化 form_data_parser_class 有一些参数。

Changelog

在 0.8 版本加入.

返回类型:

FormDataParser

max_content_length: int | None = None

最大内容长度。这将转发到表单数据分析函数 (parse_form_data() )。当设置和 formfiles 属性被访问,解析失败,因为传输的值超过了指定的值 RequestEntityTooLarge 引发异常。

Changelog

在 0.5 版本加入.

max_form_memory_size: int | None = None

最大表单字段大小。这将转发到表单数据分析函数 (parse_form_data() )。当设置和 formfiles 属性被访问,并且Post数据的内存中的数据长于指定的值A RequestEntityTooLarge 引发异常。

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

返回类型:

Any

Changelog

在 2.3 版本发生变更: 引发415错误,而不是400。

origin

发出请求的主机。设置 access_control_allow_origin 在响应中指明哪些来源是允许的。

parameter_storage_class

ImmutableMultiDict 的别名

path

URL后面的路径部分 root_path 。这是用于在应用程序内路由的路径。

property pragma: HeaderSet

pragma general header字段用于包括可能应用于请求/响应链上的任何收件人的特定于实现的指令。所有pragma指令都从协议的角度指定可选行为;但是,有些系统可能要求该行为与指令一致。

query_string

URL中“?”之后的部分。这是原始值,使用 args 用于解析的值。

property range: Range | None

解析 Range 标题。

Changelog

在 0.7 版本加入.

返回类型:

Range

referrer

referer[sic]请求头字段允许客户机为服务器的利益指定从中获取请求URI的资源的地址(uri)(“referer”,尽管头字段拼写错误)。

remote_addr

发送请求的客户端的地址。

remote_user

如果服务器支持用户身份验证,并且脚本受保护,则此属性包含用户身份验证的用户名。

root_path

装载应用程序的前缀,后面不带劈开。 path 在这之后。

property root_url: str

请求URL方案、主机和根路径。这是访问应用程序的根目录。

scheme

请求使用的协议的URL方案,例如 httpswss

property script_root: str

的别名 self.root_pathenviron["SCRIPT_ROOT"] 没有尾随的劈开。

server

服务器的地址。 (host, port)(path, None) 对于Unix套接字,或 None 如果不知道的话。

shallow: bool

在创建请求对象时设置。如果 True ,则从请求正文中读取将导致 RuntimeException 。对于防止从中间件修改流很有用。

property stream: IO[bytes]

带有安全检查的WSGI输入流。此流只能使用一次。

使用 get_data() 以获取字节或文本形式的完整数据。这个 data 属性仅在它们不表示表单数据时才包含完整字节。这个 form 属性将在这种情况下包含已分析的表单数据。

不像 input_stream ,这条小溪防止无限的小溪或阅读过去 content_lengthmax_content_length

如果 max_content_length 已设置,则可以在以下情况下在流上强制执行 wsgi.input_terminated 已经设置好了。否则,返回空流。

如果在基础流(如太大的文件或无限流)耗尽之前达到限制,则不能安全地读取流的其余内容。根据服务器对此的处理方式,客户端可能会显示“连接重置”失败,而不是看到413响应。

Changelog

在 2.3 版本发生变更: 检查 max_content_length 先发制人,边读边读。

在 0.9 版本发生变更: 即使首先访问了表单解析,也始终设置流(但可能会被使用)。

trusted_hosts: list[str] | None = None

处理请求时的有效主机名。默认情况下,所有主机都是可信的,这意味着无论客户端说主机是什么,都将被接受。

因为 HostX-Forwarded-Host 恶意客户端可以将标头设置为任何值,建议设置此属性或在代理中实现类似的验证(如果应用程序在代理之后运行)。

Changelog

在 0.9 版本加入.

property url: str

包含方案、主机、根路径、路径和查询字符串的完整请求URL。

property url_root: str

的别名 root_url 。包含方案、主机和根路径的URL。例如, https://example.com/app/

property user_agent: UserAgent

用户代理。使用 user_agent.string 以获取标头值。设置 user_agent_class 归于…的子类 UserAgent 以提供对其他属性或其他扩展数据的解析。

Changelog

在 2.1 版本发生变更: 内置解析器已删除。集 user_agent_class 到一个 UserAgent 子类从字符串中分析数据。

user_agent_class

UserAgent 的别名

property values: CombinedMultiDict[str, str]

A werkzeug.datastructures.CombinedMultiDict 这种结合 argsform .

仅对于GET请求, args 存在,而不是 form

Changelog

在 2.0 版本发生变更: 仅对于GET请求, args 存在,而不是 form

property want_form_data_parsed: bool

True 如果请求方法携带内容,则。默认情况下,如果 Content-Type 已发送。

Changelog

在 0.8 版本加入.

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__() )与 environstart_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在某些环境中可能不可用。

参数:
返回类型:

None

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

“缓存控制常规头”字段用于指定请求/响应链上所有缓存机制必须遵守的指令。

calculate_content_length()

返回内容长度(如果可用),或者 None 否则。

返回类型:

int | None

call_on_close(func)

在关闭响应时应调用的函数的内部列表中添加一个函数。由于0.7,此函数还返回已传递的函数,以便将其用作修饰器。

Changelog

在 0.6 版本加入.

参数:

func (Callable[[], Any]) --

返回类型:

Callable[[], Any]

close()

如果可能,关闭包装响应。您还可以在WITH语句中使用该对象,WITH语句将自动关闭该对象。

Changelog

在 0.9 版本加入: 现在可以在WITH语句中使用。

返回类型:

None

content_encoding

内容编码实体标题字段用作媒体类型的修饰符。当存在时,它的值指示哪些附加内容编码已应用于实体体,因此必须应用哪些解码机制才能获得内容类型标题字段引用的媒体类型。

property content_language: HeaderSet

“内容语言实体标题”字段描述了封闭实体的预期访问群体的自然语言。注意,这可能并不等同于实体体中使用的所有语言。

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_mimetype: str | None = 'text/plain'

如果未提供任何类型,则为默认MIMETYPE。

default_status = 200

如果未提供,则为默认状态。

删除cookie。如果密钥不存在,则自动失败。

参数:
  • key (str) -- 要删除的cookie的键(名称)。

  • path (str | None) -- 如果应删除的cookie仅限于路径,则必须在此处定义路径。

  • domain (str | None) -- 如果应删除的cookie仅限于某个域,则必须在此处定义该域。

  • secure (bool) -- 如果 True ,Cookie只能通过HTTPS获得。

  • httponly (bool) -- 禁止JavaScript访问Cookie。

  • samesite (str | None) -- 将Cookie的范围限制为仅附加到“同一站点”的请求。

返回类型:

None

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)

如果您想在主调度器中发布进程响应并使用子类提供的功能,那么这尤其有用。

请记住,如果可能,这将在适当的位置修改响应对象!

参数:
  • response (Response) -- 响应对象或wsgi应用程序。

  • environ (WSGIEnvironment | None) -- wsgi环境对象。

返回:

响应对象。

返回类型:

Response

freeze()

使响应对象准备好进行酸洗。执行以下操作:

  • 将响应缓冲到列表中,忽略 implicity_sequence_conversiondirect_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 功能。这将尝试自动解决此类边缘情况。但是如果你没有得到预期的输出,你应该设置 bufferedTrue 它强制缓冲。

参数:
  • app (WSGIApplication) -- 要执行的wsgi应用程序。

  • environ (WSGIEnvironment) -- 要对其执行的wsgi环境。

  • buffered (bool) -- 设置为 True 强制缓冲。

返回:

响应对象。

返回类型:

Response

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_conversionFalse .

如果 as_text 设置为 True 返回值将是解码后的字符串。

Changelog

在 0.9 版本加入.

get_etag()

返回窗体中的元组 (etag, is_weak) .如果没有etag,返回值为 (None, None) .

返回类型:

tuple[str, bool] | tuple[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已被缓冲,则会出现这种情况。

参数:

environ (WSGIEnvironment) -- 请求的wsgi环境。

返回:

返回新的 Headers 对象。

返回类型:

Headers

get_wsgi_response(environ)

以元组形式返回最终的wsgi响应。元组中的第一项是应用程序迭代器,第二项是状态,第三项是头列表。返回的响应是为给定环境专门创建的。例如,如果wsgi环境中的请求方法是 'HEAD' 响应将为空,并且只存在标题和状态代码。

Changelog

在 0.6 版本加入.

参数:

environ (WSGIEnvironment) -- 请求的wsgi环境。

返回:

一个 (app_iter, status, headers) 元组。

返回类型:

tuple[t.Iterable[bytes], str, list[tuple[str, str]]]

implicit_sequence_conversion = True

如果设置为 False 访问响应对象的属性不会尝试使用响应迭代器并将其转换为列表。

Changelog

在 0.6.2 版本加入: 以前调用过该属性 implicit_seqence_conversion .(注意拼写错误)。如果您确实使用了这个特性,那么您必须使代码适应名称更改。

property is_json: bool

检查mimetype是否指示json数据,或者 application/jsonapplication/*+json .

property is_sequence: bool

如果对迭代器进行缓冲,则此属性将 True .如果响应属性是列表或元组,那么响应对象将考虑缓冲迭代器。

Changelog

在 0.6 版本加入.

property is_streamed: bool

如果对响应进行流式处理(响应不是具有长度信息的ITerable),则此属性为 True .在这种情况下,流意味着没有关于迭代次数的信息。这通常是 True 如果将生成器传递给响应对象。

这对于在应用某种不应对流式响应进行的后筛选之前进行检查很有用。

iter_encoded()

iter用响应编码编码的响应。如果响应对象作为wsgi应用程序调用,则此方法的返回值将用作应用程序迭代器,除非 direct_passthrough 已激活。

返回类型:

Iterator[bytes]

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'>

具有 dumpsloads 与内置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,则此操作不起作用。

为了在处理范围请求时获得最佳性能,建议您的响应数据对象实现 seekableseektell 方法如所述 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 无法分析或满足头。

返回类型:

Response

Changelog

在 2.0 版本发生变更: 如果Length为0,则跳过范围处理,而不是引发416范围不可满足错误。

make_sequence()

转换列表中的响应迭代器。默认情况下,如果需要,这会自动发生。如果 implicit_sequence_conversion 如果禁用,则不会自动调用此方法,并且某些属性可能会引发异常。这也会对所有项目进行编码。

Changelog

在 0.6 版本加入.

返回类型:

None

如果Cookie标头超过此大小,则发出警告。缺省值4093应该是安全的 supported by most browsers 。仍将发送大于此大小的Cookie,但某些浏览器可能会忽略该Cookie或对其进行错误处理。设置为0可禁用此检查。

Changelog

在 0.13 版本加入.

property mimetype: str | None

mimetype(不带字符集的内容类型等)

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对象是时区感知的。

设置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" 将设置域可读的Cookie www.example.comfoo.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 版本加入.

参数:

value (bytes | str) --

返回类型:

None

set_etag(etag, weak=False)

设置etag,如果有则覆盖旧的etag。

参数:
返回类型:

None

property status: str

作为字符串的HTTP状态代码。

property status_code: int

HTTP状态代码作为数字。

property stream: ResponseStream

响应可作为只写流。

property vary: HeaderSet

vary字段值指示一组请求头字段,这些字段在响应为新鲜时完全确定是否允许缓存使用响应来答复后续请求而不进行重新验证。

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 为使用令牌而不是参数的身份验证质询添加了属性。