pyramid.request
¶
- class Request(environ, charset=None, unicode_errors=None, decode_param_names=None, **kw)[源代码]¶
的子类 WebOb 请求类。此类的实例由 router 并提供给可调用视图(以及其他子系统)作为
request
参数。以下文档(保存为
add_response_callback
和add_finished_callback
方法(在该子类本身中定义)和属性context
,registry
,root
,subpath
,traversed
,view_name
,virtual_root
和virtual_root_path
,每个都由 router 在请求进入时)是从生成此文档时使用的WebOB源代码自动生成的。由于技术限制,我们还不能显示从中自动生成此文档的WebOB版本号,但它将是发布此文档时的“当前WebOB版本” Pyramid 版本。更多信息请参见https://webob.org/。
- registry¶
这个 application registry 将作为
registry
的属性 request 对象。参见 在 Pyramid 有关应用程序注册表的详细信息。
- traversed¶
“遍历路径”将作为
traversed
的属性 request 对象。它将是一个序列,表示用于遍历到 context 不包括视图名称或子路径。如果存在与请求相关联的虚拟根,则虚拟根路径包含在遍历路径中。见 遍历 更多信息。
- 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.exception
将None
在响应和完成的回调中。
- exc_info¶
如果异常是由 root factory 或A view callable 或者在其他不同的地点 Pyramid 在处理请求期间执行用户定义的代码,结果为
sys.exc_info()
将作为exc_info
请求的属性 exception view ,A response callback 或A finished callback . 如果没有发生异常,则request.exc_info
将None
在响应和完成的回调中。
- 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
被提升。
- matched_route¶
如果A route 已在此请求期间匹配,此属性将是一个对象,表示与路由关联的URL模式匹配的路由。如果在此请求期间路由不匹配,则此属性的值将为
None
. 见 匹配的路线 .
- authenticated_userid¶
返回 userid 当前已验证的用户或
None
如果没有 security policy 或者当前没有经过身份验证的用户。
- unauthenticated_userid¶
自 2.0 版本弃用:
unauthenticated_userid
在2.0版中已弃用。使用authenticated_userid
或identity
取而代之的是。看见 升级身份验证/授权 了解更多信息。返回表示 声称 (未经验证) 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_tweens
是True
,请求将发送到 tween 在最接近请求入口的二层间堆栈中。如果use_tweens
是False
,请求将发送到主路由器处理程序,并且不会调用中间层。此功能还包括:
管理线程本地堆栈(以便
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.exception
和request.exc_info
将保留在用于呈现响应的值处。否则为request.exception
和request.exc_info
将被还原。在 1.7 版本加入.
在 1.9 版本发生变更: 这个
request.exception
和request.exc_info
属性将反映用于呈现响应的异常,以前它们在调用方法之前被重置为值。还添加了
reraise
参数。
- has_permission(permission, context=None)¶
在给定权限和可选上下文的情况下,返回
pyramid.security.Allowed
如果使用提供的上下文或已与请求关联的上下文将权限授予此请求。否则,返回pyramid.security.Denied
。此方法委托给当前安全策略。退货pyramid.security.Allowed
如果没有为此请求注册安全策略,则无条件。如果context
未提供或作为None
,使用的上下文是request.context
属性。- 参数:
- 返回:
- add_response_callback(callback)¶
向要由调用的回调集添加回调 router 在一个点之后 response 已成功创建对象。 Pyramid 没有全局响应对象:此功能允许应用程序在创建响应后注册针对响应执行的操作。
“callback”是可调用的,它接受两个位置参数:
request
和response
. 例如: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
会导致URLhttp://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
未通过。来自当前请求的键和值 matchdict 与kw
用于形成一组名为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_scheme
,HTTP_HOST
或SERVER_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。如果两者
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
已通过但未通过None
,它应该是一个字符串,将用作生成的URL的端口/主机名/初始路径部分,而不是默认的请求应用程序URL。例如,如果app_url='http://foo'
,然后是具有以下路径的资源的结果URL/baz/bar
将http://foo/baz/bar
. 如果您想生成完全相对的URL,而没有主方案、主机、端口或初始路径,则可以通过app_url=''
. 经过app_url=''
当资源路径为/baz/bar
将返回/baz/bar
.如果
app_url
已通过,并且scheme
,port
或host
也通过了,app_url
将优先,并为传递值scheme
,host
和/或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_kw
或route_remainder_name
通过,但route_name
都没有通过route_kw
和route_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_name
,route_kw
和route_remainder_name
关键字参数。在 1.9 版本发生变更: 如果
query
或anchor
是虚假的(例如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
将被忽略。scheme
,host
和port
也被忽略。
- set_property(callable, name=None, reify=False)¶
向请求实例添加可调用或属性描述符。
与属性不同的是,通过在访问时执行底层可调用来延迟评估属性。如果这些功能未被使用,它们可以免费为对象添加功能。
财产也可以通过
pyramid.decorator.reify
设置装饰器reify=True
,允许缓存计算结果。因此,在对象的生存期内,只计算一次属性值。callable
可以是接受请求作为其单个位置参数的可调用文件,也可以是属性描述符。如果
callable
是属性描述符AValueError
如果name
是None
或reify
是True
.如果
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 版本加入.
- locale_name¶
当前请求的区域设置名称,由 locale negotiator .
在 1.5 版本加入.
- property GET¶
返回包含查询字符串中所有变量的多维数据集。
- property POST¶
返回包含表单请求中所有变量的多维数据集。为非表单请求返回一个空的类似dict的对象。
表单请求通常是POST请求,但是也支持具有适当内容类型的任何其他请求。
- property accept¶
表示的属性
Accept
标题。每次分析请求环境中的头值时,都会创建一个表示头的新对象。 get 属性的值。( set 和 del 更改请求环境中的头值,不涉及解析。)
- property accept_charset¶
表示的属性
Accept-Charset
标题。每次分析请求环境中的头值时,都会创建一个表示头的新对象。 get 属性的值。( set 和 del 更改请求环境中的头值,不涉及解析。)
- property accept_encoding¶
表示的属性
Accept-Encoding
标题。每次分析请求环境中的头值时,都会创建一个表示头的新对象。 get 属性的值。( set 和 del 更改请求环境中的头值,不涉及解析。)
- property accept_language¶
表示的属性
Accept-Language
标题。每次分析请求环境中的头值时,都会创建一个表示头的新对象。 get 属性的值。( set 和 del 更改请求环境中的头值,不涉及解析。)
- 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_auth
和serialize_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:8000
,request.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
关键在于环境。
- 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.GET
, request.POST
和 request.params
见 pyramid.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 版本加入.