pyramid.request

class Request(environ, charset=None, unicode_errors=None, decode_param_names=None, **kw)[源代码]

的子类 WebOb 请求类。此类的实例由 router 并提供给可调用视图(以及其他子系统)作为 request 参数。

以下文档(保存为 add_response_callbackadd_finished_callback 方法(在该子类本身中定义)和属性 contextregistryrootsubpathtraversedview_namevirtual_rootvirtual_root_path ,每个都由 router 在请求进入时)是从生成此文档时使用的WebOB源代码自动生成的。

由于技术限制,我们还不能显示从中自动生成此文档的WebOB版本号,但它将是发布此文档时的“当前WebOB版本” Pyramid 版本。更多信息请参见https://webob.org/。

context

这个 context 将作为 context 的属性 request 对象。它将是当前请求所隐含的上下文对象。见 遍历 有关上下文对象的信息。

registry

这个 application registry 将作为 registry 的属性 request 对象。参见 在 Pyramid 有关应用程序注册表的详细信息。

root

这个 root 对象将作为 root 的属性 request 对象。它将是开始遍历的资源对象(根)。见 遍历 有关根对象的信息。

subpath

遍历 subpath 将作为 subpath 的属性 request 对象。它将是一个包含零个或多个元素(将是Unicode对象)的序列。见 遍历 有关子路径的信息。

traversed

“遍历路径”将作为 traversed 的属性 request 对象。它将是一个序列,表示用于遍历到 context 不包括视图名称或子路径。如果存在与请求相关联的虚拟根,则虚拟根路径包含在遍历路径中。见 遍历 更多信息。

view_name

这个 view name 将作为 view_name 的属性 request 对象。它将是单个字符串(如果呈现默认视图,则可能是空字符串)。见 遍历 有关视图名称的信息。

virtual_root

这个 virtual root 将作为 virtual_root 的属性 request 对象。它将是当前请求所隐含的虚拟根对象。见 虚拟主机 有关虚拟根的详细信息。

virtual_root_path

这个 virtual root path 将作为 virtual_root_path 的属性 request 对象。它将是一个序列,表示用于遍历到虚拟根对象的有序名称集。见 虚拟主机 有关虚拟根的详细信息。

exception

如果异常是由 root factory 或A view callable 或者在其他不同的地点 Pyramid 在处理请求期间执行用户定义的代码,捕获的异常对象将作为 exception 请求的属性 exception view ,A response callback 或A finished callback . 如果没有发生异常,则 request.exceptionNone 在响应和完成的回调中。

exc_info

如果异常是由 root factory 或A view callable 或者在其他不同的地点 Pyramid 在处理请求期间执行用户定义的代码,结果为 sys.exc_info() 将作为 exc_info 请求的属性 exception view ,A response callback 或A finished callback . 如果没有发生异常,则 request.exc_infoNone 在响应和完成的回调中。

response

此属性实际上是一个“reified”属性,它返回 pyramid.response.Response 类。在访问此属性之前,返回的响应对象不存在。一旦被访问,对这个请求对象的后续访问将返回相同的 Response 对象。

这个 request.response 呈现程序可以使用API。渲染器通过访问从使用该渲染器的视图中获取将返回的响应对象 request.response . 因此,可以使用 request.response 设置具有“正确”属性的响应对象的API(例如,通过调用 request.response.set_cookie(...)request.response.content_type = 'text/plain' 等)在使用渲染器的视图中。例如,在使用 renderer ::

response = request.response
response.set_cookie('mycookie', 'mine, all mine!')
return {'text':'Value that will be used by the renderer'}

此响应对象的突变将保留在呈现后发送给客户端的响应中。有关使用的详细信息 request.response 结合渲染器,请参见 呈现响应的不同属性 .

非渲染器代码也可以使用request.response,而不是“手工”创建响应。例如,在视图代码中:

response = request.response
response.body = 'Hello!'
response.content_type = 'text/plain'
return response

请注意,这种情况下的响应不是“全局的”;如果不使用渲染器,则仍然必须从视图代码返回该响应。

session

如果A session factory 已配置,此属性将表示当前用户的 session 对象。如果会话工厂 没有 已配置,请求 request.session 属性将导致 pyramid.exceptions.ConfigurationError 被提升。

matchdict

如果A route 已在该请求期间匹配,此属性将是一个字典,其中包含与路由关联的URL模式匹配的值。如果在此请求期间路由不匹配,则此属性的值将为 None . 见 媒人 .

matched_route

如果A route 已在此请求期间匹配,此属性将是一个对象,表示与路由关联的URL模式匹配的路由。如果在此请求期间路由不匹配,则此属性的值将为 None . 见 匹配的路线 .

authenticated_userid

返回 userid 当前已验证的用户或 None 如果没有 security policy 或者当前没有经过身份验证的用户。

unauthenticated_userid

自 2.0 版本弃用: unauthenticated_userid 在2.0版中已弃用。使用 authenticated_userididentity 取而代之的是。看见 升级身份验证/授权 了解更多信息。

返回表示 声称 (未经验证) userid 请求中存在的凭据。 None 如果没有 authentication policy 或者没有与当前请求关联的用户数据。这与 authenticated_userid ,因为有效的身份验证策略不会确保与 userid 存在于永久存储中。即使 userid 不存在于持久存储中,此值将是 userid 声称 通过请求数据。

effective_principals

自 2.0 版本弃用: 新的安全策略去掉了主体的概念。看见 升级身份验证/授权 了解更多信息。

返回“有效”列表的属性 principal 此请求的标识符。此列表通常包括 userid 如果用户当前已通过身份验证,但这取决于 authentication policy 实际上。如果没有 authentication policy 有效,这将返回一个仅包含 pyramid.authorization.Everyone 校长。

invoke_subrequest(request, use_tweens=False)

在 1.4a1 版本加入.

根据中的信息从Pyramid应用程序获取响应对象 request 提供了对象。这个 request 对象必须是实现Pyramid请求接口的对象(例如 pyramid.request.Request 实例)。如果 use_tweensTrue ,请求将发送到 tween 在最接近请求入口的二层间堆栈中。如果 use_tweensFalse ,请求将发送到主路由器处理程序,并且不会调用中间层。

此功能还包括:

  • 管理线程本地堆栈(以便 get_current_request()get_current_registry() 在请求期间工作)

  • 添加一个 registry 属性(当前Pyramid注册表)和 invoke_subrequest 属性(可调用的)到它所传递的请求对象。

  • 设置请求扩展(例如通过 add_request_method() )一经请求,它就通过了。

  • 原因A NewRequest 在请求处理开始时发送的事件。

  • 原因A ContextFound 找到上下文资源时要发送的事件。

  • 确保传递的请求所隐含的用户具有调用视图可调用视图的必要授权。

  • 调用任何 response callback 如果从Pyramid应用程序获得响应,则在请求的生存期内定义的函数。

  • 原因A NewResponse 获取响应时要发送的事件。

  • 调用任何 finished callback 在请求的生存期内定义的函数。

invoke_subrequest 不是 事实上 请求对象的一种方法;它是在调用Pyramid路由器或调用子请求时添加的可调用方法。这意味着它不可根据请求使用,例如 pshell 环境。

参见

也见 调用子请求 .

invoke_exception_view(exc_info=None, request=None, secure=True, reraise=False)

执行与所调用请求相关的异常视图。它所采用的论点如下:

exc_info

如果提供,则应为3元组,格式由提供 sys.exc_info() . 如果没有提供, sys.exc_info() 将调用以获取当前解释器异常信息。违约: None .

request

如果要使用的请求与调用此方法的实例不同,则可以在此处传递。违约: None .

secure

如果当前用户没有适当的权限,则不应呈现异常视图,则应 True . 违约: True .

reraise

一个布尔值,指示在 response 无法创建对象。如果 False 然后一个 pyramid.httpexceptions.HTTPNotFound 将引发异常。违约: ``False` .

如果生成响应,则 request.exceptionrequest.exc_info 将保留在用于呈现响应的值处。否则为 request.exceptionrequest.exc_info 将被还原。

在 1.7 版本加入.

在 1.9 版本发生变更: 这个 request.exceptionrequest.exc_info 属性将反映用于呈现响应的异常,以前它们在调用方法之前被重置为值。

还添加了 reraise 参数。

has_permission(permission, context=None)

在给定权限和可选上下文的情况下,返回 pyramid.security.Allowed 如果使用提供的上下文或已与请求关联的上下文将权限授予此请求。否则,返回 pyramid.security.Denied 。此方法委托给当前安全策略。退货 pyramid.security.Allowed 如果没有为此请求注册安全策略,则无条件。如果 context 未提供或作为 None ,使用的上下文是 request.context 属性。

参数:
  • permission (str) -- 此请求是否具有给定的权限?

  • context (object) -- 资源对象或 None

返回:

要么 pyramid.security.Allowedpyramid.security.Denied .

add_response_callback(callback)

向要由调用的回调集添加回调 router 在一个点之后 response 已成功创建对象。 Pyramid 没有全局响应对象:此功能允许应用程序在创建响应后注册针对响应执行的操作。

“callback”是可调用的,它接受两个位置参数: requestresponse . 例如:

1def cache_callback(request, response):
2    'Set the cache_control max_age for the response'
3    response.cache_control.max_age = 360
4request.add_response_callback(cache_callback)

响应回调按添加的顺序调用(首先调用最近添加的)。如果应用程序代码中发生异常,或者如果由返回的响应对象 view 代码无效。

调用所有响应回调 之后 Twitter和Twitter 之前 这个 pyramid.events.NewResponse 事件被发送。

回调引发的错误不会被特殊处理。它们将传播到 Pyramid 路由器应用程序。

参见

也见 使用响应回调 .

add_finished_callback(callback)

将回调添加到回调集,以便由 router 在请求处理的最后。

callback 是可调用的,它接受单个位置参数: request . 例如:

1import transaction
2
3def commit_callback(request):
4    '''commit or abort the transaction associated with request'''
5    if request.exception is not None:
6        transaction.abort()
7    else:
8        transaction.commit()
9request.add_finished_callback(commit_callback)

已完成的回调按添加的顺序调用(先到最近添加的)。完成的回调(与响应回调不同)是 总是 调用,即使应用程序代码中发生了阻止生成响应的异常。

调用与请求关联的已完成回调集 很晚 在处理该请求时;它们本质上是 router . 在顶级响应处理完成后调用它们 finally: 在路由器请求处理代码中阻塞。结果,突变发生在 request 提供给完成的回调将没有任何意义的效果,因为响应处理将已经发生,并且在处理完所有完成的回调之后,请求的作用域将几乎立即过期。

完成的回调引发的错误不会被特殊处理。它们将传播到 Pyramid 路由器应用程序。

参见

也见 使用完成的回调 .

route_url(route_name, *elements, **kw)

为已命名的 Pyramid route configuration .

使用路线 name 作为第一个位置参数。附加位置参数 (*elements )在生成后作为路径段附加到URL。

使用关键字参数提供与路由定义中的任何动态路径元素匹配的值。提出一个 KeyError 如果由于任何原因(例如,参数不足)无法生成URL,则出现异常。

例如,如果您已经用路径定义了一个名为“foobar”的路由 {{foo}}/{{bar}}/*traverse ::

request.route_url('foobar',
                   foo='1')             => <KeyError exception>
request.route_url('foobar',
                   foo='1',
                   bar='2')             => <KeyError exception>
request.route_url('foobar',
                   foo='1',
                   bar='2',
                   traverse=('a','b'))  => http://e.com/1/2/a/b
request.route_url('foobar',
                   foo='1',
                   bar='2',
                   traverse='/a/b')     => http://e.com/1/2/a/b

值替换 :segment 参数可以作为字符串或Unicode对象传递。它们将被编码为UTF-8,并在放入生成的URL之前引用URL。

值替换 *remainder 参数可以作为字符串传递 or unicode/string值的元组。如果一个元组作为 *remainder 替换值,它的值被URL引用并编码为UTF-8。生成的字符串与斜线连接并呈现到URL中。如果字符串作为 *remainder 替换值,在URL被引用后附加到URL,但嵌入斜杠除外。

如果 _query 如果提供,它将用于组成一个查询字符串,该字符串将附加到URL的末尾。价值 _query 可能是两个元组的序列 or 具有 .items() 方法返回两个元组的序列(可能是字典)。根据 pyramid.url.urlencode() 功能。这将在 x-www-form-urlencoded 格式。可以通过传递 一串 作为价值 _query 在这种情况下,它将被URL引用(例如,query=“foo bar”将变为“foo%20bar”)。但是,结果不需要输入 k=v 按要求的格式 x-www-form-urlencoded . 在将查询数据转换为查询字符串后, ? 是前置的,结果字符串将附加到生成的URL。

备注

传递为 _query 它们是序列或字典,按照与运行时相同的规则转换为字符串 urllib.urlencode()doseq 参数等于 True . 这意味着序列可以作为值传递,并且每个值的查询字符串中都将放置一个k=v对。

如果关键字参数 _anchor 如果存在,则其字符串表示形式将根据 RFC 3986#section-3.5 并在生成的URL中用作命名锚(例如,如果 _anchor 传递为 foo 路由URL是 http://example.com/route/url ,生成的URL将 http://example.com/route/url#foo

备注

如果 _anchor 作为字符串传递,它应该是UTF-8编码的。如果 _anchor 作为一个Unicode对象传递,它将在附加到URL之前转换为UTF-8。

如果两者 _anchor_query 如果指定了锚定元素,则锚定元素将始终跟随查询元素,例如 http://example.com?foo=1#bar .

如果任何关键字参数 _scheme_host_port 已传递且不是``none``,提供的值将替换生成的URL中的命名部分。例如,如果通过 _host='foo.com' ,如果不替换主机,则会生成的URL为 http://example.com/a ,结果是 http://foo.com/a .

注意如果 _scheme 传递为 https_port 没有通过 _port 假定值已作为 443 . 同样,如果 _scheme 传递为 http_port 没有通过 _port 假定值已作为 80 . 若要避免此行为,请始终显式传递 _port 每当你经过 _scheme .

如果关键字 _app_url 如果存在,它将用作生成的URL的协议/hostname/port/leading path前缀。例如,使用 _app_url 属于 http://example.com:8080/foo 会导致URL http://example.com:8080/foo/fleeb/flub 如果与 route_name 扩展到 /fleeb/flub . 如果 _app_url 未指定,结果为 request.application_url 将用作前缀(默认)。

如果两者 _app_url 和任何 _scheme_host_port 通过, _app_url 优先,并为传递任何值 _scheme_host_port 将被忽略。

此函数引发 KeyError 如果由于缺少替换名称而无法生成URL。多余的替换名称将被忽略。

如果路由对象与 route_name 自变量有 pregenerator , the *elements**kw 传递给此函数的参数可能会被扩充或更改。

在 1.5 版本发生变更: 允许 _query 选项是启用可选编码的字符串。

这个 _anchor 选项将被转义,而不是使用其原始字符串表示形式。

在 1.9 版本发生变更: 如果 _query_anchor 是虚假的(例如 None 或者一个空字符串)它们不会包含在生成的URL中。

route_path(route_name, *elements, **kw)

为已命名的 Pyramid route configuration .

此函数接受的参数与 pyramid.request.Request.route_url() 履行同样的职责。它只省略返回值中的主机、端口和方案信息;返回的字符串中只存在脚本名称、路径、查询参数和定位数据。

例如,如果您已经用路径定义了一个名为“foobar”的路由 /{{foo}}/{{bar}} 这个呼唤 route_path ::

request.route_path('foobar', foo='1', bar='2')

将返回字符串 /1/2 .

备注

调用 request.route_path('route') 和打电话一样吗 request.route_url('route', _app_url=request.script_name) . pyramid.request.Request.route_path() 实际上,是根据 pyramid.request.Request.route_url() 就这样。因此,任何 _app_url 通过了 **kw 值到 route_path 将被忽略。

current_route_url(*elements, **kw)

为已命名的 Pyramid route configuration 基于“当前路线”。

此功能补充 pyramid.request.Request.route_url() . 它提供了为“当前路由”(定义为在生成请求时匹配的路由)生成URL的简单方法。

此方法的参数与传递给的名称相同的参数具有相同的含义。 pyramid.request.Request.route_url() . 它还理解一个额外的论点, route_url 未命名 _route_name .

用于生成URL的路由名称取自 _route_name 关键字参数或当前与请求关联的路由的名称,如果 _route_name 未通过。来自当前请求的键和值 matchdictkw 用于形成一组名为 newkw . 然后 request.route_url(route_name, *elements, **newkw) 调用,返回一个URL。

例子如下。

如果“当前路由”具有路由模式 /foo/{{page}} 当前的URL路径是 /foo/1 ,Matchdict将 {{'page':'1'}} . 结果 request.current_route_url() 在这种情况下 /foo/1 .

如果“当前路由”具有路由模式 /foo/{{page}} 当前的URL路径是 /foo/1 ,Matchdict将 {{'page':'1'}} . 结果 request.current_route_url(page='2') 在这种情况下 /foo/2 .

使用 _route_name 关键字参数:如果路由表定义路由 /foo/{{action}} 命名为“FO” /foo/{{action}}/{{page}} 已命名 fooaction ,当前的URL模式是 /foo/view (与 /foo/{{action}} 路由),我们可能希望使用matchdict参数生成 fooaction 路线。在这种情况下, request.current_route_url(_route_name='fooaction', page='5') 将返回如下字符串: /foo/view/5 .

current_route_path(*elements, **kw)

Pyramid route configuration 与当前请求匹配。

此函数接受的参数与 pyramid.request.Request.current_route_url() 履行同样的职责。它只省略返回值中的主机、端口和方案信息;返回的字符串中只存在脚本名称、路径、查询参数和定位数据。

例如,如果与当前请求匹配的路由具有模式 /{{foo}}/{{bar}} 这个呼唤 current_route_path ::

request.current_route_path(foo='1', bar='2')

将返回字符串 /1/2 .

备注

调用 request.current_route_path('route') 和打电话一样吗 request.current_route_url('route', _app_url=request.script_name) . pyramid.request.Request.current_route_path() 实际上,是根据 pyramid.request.Request.current_route_url() 就这样。因此,任何 _app_url 通过了 **kw 值到 current_route_path 将被忽略。

static_url(path, **kw)

为静态文件生成完全限定的URL asset . 资产必须位于通过 pyramid.config.Configurator.add_static_view() configuration declaration (见 服务静态资产

例子::

request.static_url('mypackage:static/foo.css') =>

                        http://example.com/static/foo.css

这个 path 参数指向磁盘上应该为其生成URL的文件或目录。这个 path 可以是相对路径(例如 static/foo.css )或绝对路径(例如 /abspath/to/static/foo.css 或A asset specification (例如) mypackage:static/foo.css

目的 **kw 论点与 pyramid.request.Request.route_url() **kw 参数。请参阅该函数的文档以了解可以提供给它的参数。但是,通常,您不需要将任何内容作为 *kw 生成Static AssetsURL时。

此函数引发 ValueError 如果找不到与路径规范匹配的静态视图定义。

static_path(path, **kw)

为静态资源生成路径(也称为“相对URL”,即减去主机、方案和端口的URL)。

此函数接受的参数与 pyramid.request.Request.static_url() 履行同样的职责。它只省略返回值中的主机、端口和方案信息;返回的字符串中只存在脚本名称、路径、查询参数和定位数据。

例子::

request.static_path('mypackage:static/foo.css') =>

                        /static/foo.css

备注

调用 request.static_path(apath) 和打电话一样吗 request.static_url(apath, _app_url=request.script_name) . pyramid.request.Request.static_path() 实际上,是根据 pyramid.request.Request.static_url() 就这样。因此,任何 _app_url 通过了 **kw 值到 static_path 将被忽略。

resource_url(resource, *elements, **kw)

生成一个字符串,该字符串表示 resource 对象基于 wsgi.url_schemeHTTP_HOSTSERVER_NAME 在请求中,加上任何 SCRIPT_NAME . 这个方法的总结果总是一个UTF-8编码的字符串。

实例:

request.resource_url(resource) =>

                           http://example.com/

request.resource_url(resource, 'a.html') =>

                           http://example.com/a.html

request.resource_url(resource, 'a.html', query={'q':'1'}) =>

                           http://example.com/a.html?q=1

request.resource_url(resource, 'a.html', anchor='abc') =>

                           http://example.com/a.html#abc

request.resource_url(resource, app_url='') =>

                           /

作为传入的任何位置参数 elements 必须是字符串unicode对象或整数对象。这些将被斜杠连接并附加到生成的资源URL。传入的每个元素在附加之前都是URL引用的;如果任何元素是Unicode,它将在被URL引用之前转换为UTF-8字节字符串。如果任何元素是一个整数,它将在被URL引用之前转换为其字符串表示形式。

警告

elements 指定了参数,资源URL将以尾随斜杠结尾。如果有的话 elements 如果使用,生成的URL将 not 以尾随斜杠结尾。

如果 query 如果提供,它将用于组成一个查询字符串,该字符串将附加到URL的末尾。价值 query 可能是两个元组的序列 or 具有 .items() 方法返回两个元组的序列(可能是字典)。根据 pyramid.url.urlencode() 功能。这将在 x-www-form-urlencoded 格式。可以通过传递 一串 作为价值 query 在这种情况下,它将被URL引用(例如,query=“foo bar”将变为“foo%20bar”)。但是,结果不需要输入 k=v 按要求的格式 x-www-form-urlencoded . 在将查询数据转换为查询字符串后, ? 是前置的,结果字符串将附加到生成的URL。

备注

传递为 query 它们是序列或字典,按照与运行时相同的规则转换为字符串 urllib.urlencode()doseq 参数等于 True . 这意味着序列可以作为值传递,并且每个值的查询字符串中都将放置一个k=v对。

如果关键字参数 anchor 如果存在,则其字符串表示形式将用作生成的URL中的命名锚(例如,如果 anchor 传递为 foo 资源URL是 http://example.com/resource/url ,生成的URL将 http://example.com/resource/url#foo

备注

如果 anchor 作为字符串传递,它应该是UTF-8编码的。如果 anchor 作为一个Unicode对象传递,它将在附加到URL之前转换为UTF-8。

如果两者 anchorquery 如果指定了锚定元素,则锚定元素将始终跟随查询元素,例如 http://example.com?foo=1#bar .

如果任何关键字参数 schemehostport 已传递且不是``none``,提供的值将替换生成的URL中的命名部分。例如,如果通过 host='foo.com' ,如果不替换主机,则会生成的URL为 http://example.com/a ,结果是 http://foo.com/a .

如果 scheme 传递为 https 和一个明确的 port 没有通过 port 假定值已作为 443 . 同样,如果 scheme 传递为 httpport 没有通过 port 假定值已作为 80 . 若要避免此行为,请始终显式传递 port 每当你经过 scheme .

如果关键字参数 app_url 已通过但未通过 None ,它应该是一个字符串,将用作生成的URL的端口/主机名/初始路径部分,而不是默认的请求应用程序URL。例如,如果 app_url='http://foo' ,然后是具有以下路径的资源的结果URL /baz/barhttp://foo/baz/bar . 如果您想生成完全相对的URL,而没有主方案、主机、端口或初始路径,则可以通过 app_url='' . 经过 app_url='' 当资源路径为 /baz/bar 将返回 /baz/bar .

如果 app_url 已通过,并且 schemeporthost 也通过了, app_url 将优先,并为传递值 schemehost 和/或 port 将被忽略。

如果 resource 有一个 __resource_url__ 方法,它将用于生成此函数所操作的基础资源的URL(方案、主机、端口、路径)。

参见

也见 覆盖资源URL生成 .

如果 route_name 如果传递,则此函数将其URL生成委托给 route_url 功能。打电话 resource_url(someresource, 'element1', 'element2', query={{'a':1}}, route_name='blogentry') 大致相当于做:

traversal_path = request.resource_path(someobject)
url = request.route_url(
          'blogentry',
          'element1',
          'element2',
          _query={'a':'1'},
          traverse=traversal_path,
          )

只有通过才是明智的 route_name 如果要命名的路由具有 *remainder Stararg值,例如 *traverse . 其余值将在输出中被忽略,否则。

默认情况下,资源路径值将作为名称传递 traverse 什么时候? route_url 被称为。你可以通过传递一个不同的 route_remainder_name 如果路由具有不同的值 *stararg 结束时的值。例如,如果要替换的路由模式具有 *subpath 斯塔拉格阿拉 /foo*subpath ::

request.resource_url(
               resource,
               route_name='myroute',
               route_remainder_name='subpath'
               )

如果 route_name 通过,也可以通过 route_kw ,它将作为附加关键字参数传递给 route_url . 说 resource_url(someresource, 'element1', 'element2', route_name='blogentry', route_kw={{'id':'4'}}, _query={{'a':'1'}}) 大致相当于:

traversal_path = request.resource_path_tuple(someobject)
kw = {'id':'4', '_query':{'a':'1'}, 'traverse':traversal_path}
url = request.route_url(
          'blogentry',
          'element1',
          'element2',
          **kw,
          )

如果 route_kwroute_remainder_name 通过,但 route_name 都没有通过 route_kwroute_remainder_name 将被忽略。如果 route_name 通过, __resource_url__ 无条件忽略传递的资源的方法。此功能与生成自己URL的资源不兼容。

备注

如果 resource 使用的结果是 traversal 一定是 location 意识到。资源也可以是 URL dispatch ;这样发现的上下文不需要知道位置。

备注

如果请求环境中存在“虚拟根路径”(wsgi environ key的值 HTTP_X_VHM_ROOT 资源是通过 traversal ,URL路径将不包含虚拟根前缀(它将从生成的URL的左侧剥离)。

备注

出于向后兼容性的目的,此方法也被命名为 model_url 请求方法。

在 1.3 版本发生变更: 增加了 app_url 关键字参数。

在 1.5 版本发生变更: 允许 query 选项是启用可选编码的字符串。

这个 anchor 选项将被转义,而不是使用其原始字符串表示形式。

增加了 route_nameroute_kwroute_remainder_name 关键字参数。

在 1.9 版本发生变更: 如果 queryanchor 是虚假的(例如 None 或者一个空字符串)它们不会包含在生成的URL中。

resource_path(resource, *elements, **kw)

resource .

此函数接受的参数与 pyramid.request.Request.resource_url() 履行同样的职责。它只省略返回值中的主机、端口和方案信息;返回的字符串中只存在脚本名称、路径、查询参数和定位数据。

备注

调用 request.resource_path(resource) 和打电话一样吗 request.resource_path(resource, app_url=request.script_name) . pyramid.request.Request.resource_path() 实际上,是根据 pyramid.request.Request.resource_url() 就这样。因此,任何 app_url 通过了 **kw 值到 route_path 将被忽略。 schemehostport 也被忽略。

set_property(callable, name=None, reify=False)

向请求实例添加可调用或属性描述符。

与属性不同的是,通过在访问时执行底层可调用来延迟评估属性。如果这些功能未被使用,它们可以免费为对象添加功能。

财产也可以通过 pyramid.decorator.reify 设置装饰器 reify=True ,允许缓存计算结果。因此,在对象的生存期内,只计算一次属性值。

callable 可以是接受请求作为其单个位置参数的可调用文件,也可以是属性描述符。

如果 callable 是属性描述符A ValueError 如果 nameNonereifyTrue .

如果 name 如果为“无”,则将从 callable .

 1def _connect(request):
 2    conn = request.registry.dbsession()
 3    def cleanup(request):
 4        # since version 1.5, request.exception is no
 5        # longer eagerly cleared
 6        if request.exception is not None:
 7            conn.rollback()
 8        else:
 9            conn.commit()
10        conn.close()
11    request.add_finished_callback(cleanup)
12    return conn
13
14@subscriber(NewRequest)
15def new_request(event):
16    request = event.request
17    request.set_property(_connect, 'db', reify=True)

订阅服务器实际上没有连接到数据库,它只提供API,当通过 request.db ,将创建连接。由于reify,每个请求只进行一个连接,即使 request.db 多次访问。

此模式提供了一种方法来增强 request 对象而不必对其进行子类化,这对扩展作者很有用。

在 1.3 版本加入.

localizer

A localizer 它将使用当前区域设置名称来转换值。

在 1.5 版本加入.

locale_name

当前请求的区域设置名称,由 locale negotiator .

在 1.5 版本加入.

property GET

返回包含查询字符串中所有变量的多维数据集。

property POST

返回包含表单请求中所有变量的多维数据集。为非表单请求返回一个空的类似dict的对象。

表单请求通常是POST请求,但是也支持具有适当内容类型的任何其他请求。

ResponseClass

Response 的别名

property accept

表示的属性 Accept 标题。

(RFC 7231, section 5.3.2

每次分析请求环境中的头值时,都会创建一个表示头的新对象。 get 属性的值。( setdel 更改请求环境中的头值,不涉及解析。)

property accept_charset

表示的属性 Accept-Charset 标题。

(RFC 7231, section 5.3.3

每次分析请求环境中的头值时,都会创建一个表示头的新对象。 get 属性的值。( setdel 更改请求环境中的头值,不涉及解析。)

property accept_encoding

表示的属性 Accept-Encoding 标题。

(RFC 7231, section 5.3.4

每次分析请求环境中的头值时,都会创建一个表示头的新对象。 get 属性的值。( setdel 更改请求环境中的头值,不涉及解析。)

property accept_language

表示的属性 Accept-Language 标题。

(RFC 7231, section 5.3.5

每次分析请求环境中的头值时,都会创建一个表示头的新对象。 get 属性的值。( setdel 更改请求环境中的头值,不涉及解析。)

property application_url

包含脚本名称的URL(无路径信息或查询字符串)

as_bytes(skip_body=False)

返回表示此请求的HTTP字节。如果skip-body为true,则排除body。如果skip-body是大于1的整数,则仅当其长度大于该数字时才跳过body。

property authorization

获取并设置 Authorization 标题(HTTP规范第14.8节) . 使用转换它 parse_authserialize_auth .

classmethod blank(path, environ=None, base_url=None, headers=None, POST=None, **kw)

使用给定的路径(路径应为urlencoded)和environ中的任何键创建一个空白的请求环境(和请求包装器)。

路径将变为路径_info,任何查询字符串都将被拆分并使用。

所有必需的键都将添加到环境中,但您传递的值将优先。如果传入基URL,则将从该值中填充wsgi.url_方案、http_主机和脚本名称。

任何额外的关键字都将传递给 __init__ .

property body

返回请求主体的内容。

property body_file

请求的输入流(wsgi.input)。设置此属性将重置内容长度和可查找标志(与设置req.body_file_raw不同)。

property body_file_raw

获取并设置 wsgi.input 关键在于环境。

property body_file_seekable

获取请求体(wsgi.input)作为类似于对象的可查找文件。中间件和路由应用程序应该在.body文件上使用这个属性。

如果访问此值,内容长度也将更新。

property cache_control

获取/设置/修改缓存控制头(HTTP规范第14.9节)

call_application(application, catch_exc_info=False)

调用给定的wsgi应用程序,返回 (status_string, headerlist, app_iter)

一定要打电话 app_iter.close() 如果它在那里。

如果catch-exc-info为true,则返回 (status_string, headerlist, app_iter, exc_info) ,其中第四项可能是无,但如果有例外,则不会是。如果您不这样做,并且发生了异常,则会直接引发异常。

property client_addr

作为字符串的有效客户端IP地址。如果 HTTP_X_FORWARDED_FOR 头存在于wsgi环境中,此属性返回该头中存在的客户端IP地址(例如,如果头值为 192.168.1.1, 192.168.1.2 ,值将为 192.168.1.1 )如果没有 HTTP_X_FORWARDED_FOR 头在环境中存在,此属性将返回 REMOTE_ADDR 标题。如果 REMOTE_ADDR 头未设置,此属性将返回值 None .

警告

用户代理可以将其他人的IP或任何字符串放入 HTTP_X_FORWARDED_FOR 因为它是一个普通的HTTP头。转发代理还可以提供不正确的值(专用IP地址等)。您不能“盲目”信任此方法的结果来为您提供有效的数据,除非您确定 HTTP_X_FORWARDED_FOR 具有正确的值。wsgi服务器必须位于受信任代理之后,才能实现这一点。

property content_length

获取并设置 Content-Length 标题(HTTP规范第14.13节) . 使用int转换它。

property content_type

返回内容类型,但不包括任何参数(如charset,也包括 application/atom+xml; type=entry

如果设置此属性,则可以包含参数,或者如果值中不包含任何参数,则将保留现有参数。

property cookies

返回请求中找到的cookie字典。

copy()

复制请求和环境对象。

除了wsgi.input,这只做一个浅拷贝。

copy_body()

在可能与另一个请求对象共享但不需要的情况下,复制主体。

这将把主体复制到一个字节sio对象(通过设置req.body)或一个临时文件中。

copy_get()

复制request和environment对象,但将此请求转换为get-along-the-way。如果这是一个POST请求(或任何其他动词),那么它将变为GET,请求主体将被丢弃。

property date

获取并设置 Date 标题(HTTP规范第14.8节) . 使用HTTP日期转换它。

property domain

返回主机值的域部分。相当于:

domain = request.host
if ':' in domain and domain[-1] != ']': # Check for ] because of IPv6
    domain = domain.rsplit(':', 1)[0]

这相当于 HTTP_HOST 环境中的值(如果存在),或者 SERVER_NAME 环境中的值(如果不是)。例如,如果环境中包含 HTTP_HOST 价值 foo.example.com:8000request.domain 将返回 foo.example.com .

请注意,此值不能 set 应要求。要设置主机值,请使用 webob.request.Request.host() 相反。

classmethod from_bytes(b)

从HTTP字节数据创建请求。如果请求后字节包含额外数据,则引发ValueError。

classmethod from_file(fp)

从类似文件的对象读取请求(它必须实现 .read(size).readline()

它将一直读到请求的结尾,而不是文件的结尾(除非请求是POST或PUT,并且没有内容长度,在这种情况下,将读取整个文件)。

这将读取由表示的请求 str(req) ;它可能无法正确读取每个有效的HTTP请求。

get_response(application=None, catch_exc_info=False)

喜欢 .call_application(application) ,但返回的响应对象 .status.headers.body 属性。

这将使用 self.ResponseClass 以确定要返回的响应对象的类。

如果 application 未给出,这将向发送请求 self.make_default_send_app()

property headers

所有的请求头都是不区分大小写的类似字典的对象。

property host

在HTTP主机中提供的主机名,返回服务器名称

property host_port

作为字符串的有效服务器端口号。如果 HTTP_HOST 头存在于wsgi环境中,此属性返回该头中存在的端口号。如果 HTTP_HOST 头存在,但不包含显式端口号:如果wsgi url方案为“https”,则此属性返回“443”,如果wsgi url方案为“http”,则此属性返回“80”。如果没有 HTTP_HOST 头在环境中存在,此属性将返回 SERVER_PORT 头部(保证存在)。

property host_url

通过主机的URL(无路径)

property http_version

获取并设置 SERVER_PROTOCOL 关键在于环境。

property identity

返回标识当前用户的不透明对象,或者 None 如果没有用户经过身份验证,或者没有 security policy 实际上。

property if_match

获取并设置 If-Match 标题(HTTP规范第14.24节) . 将其转换为etag。

property if_modified_since

获取并设置 If-Modified-Since 标题(HTTP规范第14.25节) . 使用HTTP日期转换它。

property if_none_match

获取并设置 If-None-Match 标题(HTTP规范第14.26节) . 将其转换为etag。

property if_range

获取并设置 If-Range 标题(HTTP规范第14.27节) . 使用ifrange对象转换它。

property if_unmodified_since

获取并设置 If-Unmodified-Since 标题(HTTP规范第14.28节) . 使用HTTP日期转换它。

property is_authenticated

返回 True 如果用户已针对此请求进行身份验证。

property is_body_readable

webob.is_body_readable是一个标志,它告诉我们即使缺少内容长度,也可以读取输入流。

property is_body_seekable

获取并设置 webob.is_body_seekable 关键在于环境。

is_response(ob)[源代码]

返回 True 如果对象作为 ob 是有效的响应对象, False 否则。

property is_xhr

是否存在x-requested-with头并等于 XMLHttpRequest 是吗?

注意:这不是由每个xmlhttprequest请求设置的,只有在使用设置它的javascript库(或者您自己手动设置头)时才会设置。目前已知prototype和jquery设置了这个头。

property json

以JSON的形式访问请求体

property json_body

以JSON的形式访问请求体

make_body_seekable()

这种力量 environ['wsgi.input'] 被发现。这意味着,内容将被复制到一个字节集或临时文件中,并标记为可查找,这样就不会不必要地再次复制内容。

调用此方法后,.body_文件始终被视为文件的开头,.content_长度不是无。

复制到bytesio的选项来自 self.request_body_tempfile_limit

make_tempfile()

创建一个临时文件来存储大请求主体。这个API还不稳定。可能会添加“size”参数。

property max_forwards

获取并设置 Max-Forwards 标题(HTTP规范第14.31节) . 使用int转换它。

property method

获取并设置 REQUEST_METHOD 关键在于环境。

property params

一个类似字典的对象,包含来自查询字符串和请求主体的参数。

property path

请求的路径,不带主机或查询字符串

property path_info

获取并设置 PATH_INFO 关键在于环境。

path_info_peek()

返回路径_info上的下一段,如果没有下一段,则返回none。不修改环境。

path_info_pop(pattern=None)

从路径信息的下一段弹出,将其推到脚本名称上,并返回弹出的段。如果路径u info上没有剩余内容,则返回none。

不返 '' 当有一段空的时候(比如 /path//path );这些段只是被忽略。

可选的 pattern 参数是返回前匹配返回值的regexp。如果没有匹配项,则不会对请求进行任何更改,也不会返回任何内容。

property path_qs

请求的路径,不带主机,但带有查询字符串

property path_url

包含脚本名称和路径信息但不包含查询字符串的URL

property pragma

获取并设置 Pragma 标题(HTTP规范第14.32节) .

property query_string

获取并设置 QUERY_STRING 关键在于环境。

property range

获取并设置 Range 标题(HTTP规范第14.35节) . 使用范围对象转换它。

property referer

获取并设置 Referer 标题(HTTP规范第14.36节) .

property referrer

获取并设置 Referer 标题(HTTP规范第14.36节) .

relative_url(other_url, to_application=False)

解析与请求URL相关的其他URL。

如果 to_application 为真,然后相对于只有脚本名称的URL解析它

property remote_addr

获取并设置 REMOTE_ADDR 关键在于环境。

property remote_host

获取并设置 REMOTE_HOST 关键在于环境。

property remote_user

获取并设置 REMOTE_USER 关键在于环境。

remove_conditional_headers(remove_encoding=True, remove_range=True, remove_match=True, remove_modified=True)

删除使请求成为条件的头。

这些头可能导致响应304未被修改,在某些情况下,您可能不希望这样做。

这不会删除用于冲突检测的头,如if-match。

request_iface

IRequest 的别名

property scheme

获取并设置 wsgi.url_scheme 关键在于环境。

property script_name

获取并设置 SCRIPT_NAME 关键在于环境。

send(application=None, catch_exc_info=False)

喜欢 .call_application(application) ,但返回的响应对象 .status.headers.body 属性。

这将使用 self.ResponseClass 以确定要返回的响应对象的类。

如果 application 未给出,这将向发送请求 self.make_default_send_app()

property server_name

获取并设置 SERVER_NAME 关键在于环境。

property server_port

获取并设置 SERVER_PORT 关键在于环境。使用int转换它。

property text

获取/设置正文的文本值

property upath_info

获取并设置 PATH_INFO 关键在于环境。

property url

完整的请求URL,包括查询字符串

property url_encoding

获取并设置 webob.url_encoding 关键在于环境。

property urlargs

返回任何 位置的 URL中匹配的变量。

从中获取值 environ['wsgiorg.routing_args'] . 类系统 routes 设置这个值。

property urlvars

返回任何 已命名 URL中匹配的变量。

从中获取值 environ['wsgiorg.routing_args'] . 类系统 routes 设置这个值。

property uscript_name

获取并设置 SCRIPT_NAME 关键在于环境。

property user_agent

获取并设置 User-Agent 标题(HTTP规范第14.43节) .

备注

有关a的API的信息 multidict 结构(例如用作 request.GETrequest.POSTrequest.paramspyramid.interfaces.IMultiDict .

apply_request_extensions(request)[源代码]

将请求扩展(方法和属性)应用于的实例 pyramid.interfaces.IRequest . 此方法依赖于 request 包含正确初始化的注册表。

调用此方法后, request 应具有使用 pyramid.config.Configurator.add_request_method() .

class RequestLocalCache(creator=None)[源代码]

在请求的生命周期内缓存值的存储区。

包装函数

实例化并使用它来修饰接受请求参数的函数。结果被缓存,并在函数的后续调用中返回。

@RequestLocalCache()
def get_user(request):
    result = ...  # do some expensive computations
    return result

value = get_user(request)

# manipulate the cache directly
get_user.cache.clear(request)

缓存实例作为 cache 属性,以便该函数可用于操作缓存。

包装方法

方法可以用作创建者函数,但它需要绑定到一个实例,以便它只接受一个参数-请求。要做到这一点,一种简单的方法是将创建者绑定到构造函数中,然后使用 get_or_create()

class SecurityPolicy:
    def __init__(self):
        self.identity_cache = RequestLocalCache(self.load_identity)

    def load_identity(self, request):
        result = ...  # do some expensive computations
        return result

    def identity(self, request):
        return self.identity_cache.get_or_create(request)

缓存为每个请求维护一个弱引用,并在对请求进行垃圾收集时释放缓存值。但是,在大多数情况下,它会通过以下方式更早地释放资源 pyramid.request.Request.add_finished_callback()

在 2.0 版本加入.

clear(request)[源代码]

从缓存中删除该值。

返回缓存值或 NO_VALUE

get(request, default=NO_VALUE)[源代码]

从缓存返回值。

返回缓存值或 default

get_or_create(request, creator=None)[源代码]

从缓存返回值。如有必要,请计算。

如果没有缓存任何值,则执行创建者,缓存结果并返回它。

创建者可以作为参数传入,或者通过修饰函数绑定到缓存,或者作为构造函数参数提供。

set(request, value)[源代码]

使用新值更新缓存。