金字塔形自省¶
在 1.3 版本加入.
当金字塔启动时,每个调用 configuration directive 导致一个或多个 introspectable 要在中注册的对象 introspector . 内省器可以通过应用程序代码进行查询,以获取有关正在运行的应用程序配置的信息。此功能对于调试工具栏、显示某些配置方面的命令行脚本以及启动时配置设置的运行时报告非常有用。
使用内省器¶
下面是一个从一个叫做金字塔的视图中使用金字塔的内省器的例子:
1from pyramid.view import view_config
2from pyramid.response import Response
3
4@view_config(route_name='bar')
5def show_current_route_pattern(request):
6    introspector = request.registry.introspector
7    route_name = request.matched_route.name
8    route_intr = introspector.get('routes', route_name)
9    return Response(str(route_intr['pattern']))
此视图将返回包含提供给 add_route 调用视图时匹配的路由的方法。它使用 pyramid.interfaces.IIntrospector.get() 返回类别中可内省的方法 routes 用一个 discriminator 等于匹配的路由名称。然后,它使用返回的内省来获取“模式”值。
内省器的查询方法返回的内省具有以下描述的方法和属性: pyramid.interfaces.IIntrospectable .  尤其是, get() , get_category() , categories() , categorized() 和 related() 内省器的方法可用于查询内省。
反省的对象¶
自省对象从自省器的查询方法返回。每个自省对象实现在中记录的属性和方法 pyramid.interfaces.IIntrospectable .
所有自省者共享的重要属性如下:
title
描述反省的人类可读的文本标题
category_name
描述此自省所属自省类别的文本类别名称。如果期望在该类别中有多个可内省的注册,则通常是复数。
discriminator
一个哈希对象,表示该自省对象在其类别中的唯一值。
discriminator_hash
鉴别器的整数哈希(在HTML链接中很有用)。
type_name
此自省类别中的子类型的文本名称。如果这个自省的类别中只有一个类型名,那么这个值通常是类别名的单一版本,但它可以是任意值。
action_info
一个描述指令调用站点的对象,它导致此自省被注册。它包含中描述的属性
pyramid.interfaces.IActionInfo.
除了具有上面描述的属性之外,自省也是类似字典的对象。可以通过ITS查询自省的数据值 __getitem__ , get , keys , values 或 items 方法。例如:
1route_intr = introspector.get('routes', 'edit_user')
2pattern = route_intr['pattern']
金字塔内省分类¶
下面是内置金字塔配置指令提供的具体自省类别列表。附加软件包可能提供此处未描述的类别中的其他自省。
subscribers
每个反省在
subscribers类别表示调用pyramid.config.Configurator.add_subscriber()(或装饰师的同等产品)。每个都有以下数据。
subscriber订阅服务器可调用对象(
subscriber参数传递给add_subscriber)
interfaces订阅的接口(或类)序列
ifaces参数传递给add_subscriber)
derived_subscriber由系统内部使用的围绕订阅服务器的包装器,因此如果原始订阅服务器只接受一个参数,它可以使用多个参数来调用它。
predicates将谓词参数传递给
add_subscriber.
derived_predicates将谓词参数传递给的结果创建的谓词对象周围的包装器
add_subscriber(当谓词只接受一个值,但必须传递多个值时使用)。
response adapters
每个反省在
response adapters类别表示调用pyramid.config.Configurator.add_response_adapter()(或同等装饰师)。每个都有以下数据。
adapter适配器对象(已解决
adapter参数add_response_adapter)
type解决了
type_or_iface参数传递给add_response_adapter.
root factories
每个反省在
root factories类别表示调用pyramid.config.Configurator.set_root_factory()(或等同于配置器构造函数) or 一factory参数传递给pyramid.config.Configurator.add_route(). 每个都有以下数据。
factory工厂对象(已解决
factory参数set_root_factory)
route_name将使用此工厂的路线的名称。如果这是 违约 根工厂(如果在调用
set_root_factory,此值将为None.
session factory
只有一个内省会存在于
session factory类别。它表示对pyramid.config.Configurator.set_session_factory()(或等同于配置器构造函数)。它将包含以下数据。
factory工厂对象(已解决
factory参数set_session_factory)
request factory
只有一个内省会存在于
request factory类别。它表示对pyramid.config.Configurator.set_request_factory()(或等同于配置器构造函数)。它将包含以下数据。
factory工厂对象(已解决
factory参数set_request_factory)
locale negotiator
只有一个内省会存在于
locale negotiator类别。它表示对pyramid.config.Configurator.set_locale_negotiator()(或等同于配置器构造函数)。它将包含以下数据。
negotiator工厂对象(已解决
negotiator参数set_locale_negotiator)
renderer factories
每个反省在
renderer factories类别表示调用pyramid.config.Configurator.add_renderer()(或等同于配置器构造函数)。每个都有以下数据。
name渲染器的名称(
name参数add_renderer)
factory工厂对象(已解决
factory参数add_renderer)
routes
每个反省在
routes类别表示调用pyramid.config.Configurator.add_route(). 每个都有以下数据。
name这个
name参数传递给add_route.
pattern这个
pattern参数传递给add_route.
factory(解决)
factory参数传递给add_route.
xhr这个
xhr参数传递给add_route.
request_method这个
request_method参数传递给add_route.
request_methods请求方法名称的序列由
request_method参数传递给add_route或价值None如果Arequest_method未提供参数。
path_info这个
path_info参数传递给add_route.
request_param这个
request_param参数传递给add_route.
header这个
header参数传递给add_route.
accept这个
accept参数传递给add_route.
traverse这个
traverse参数传递给add_route.
custom_predicates这个
custom_predicates参数传递给add_route.
pregenerator这个
pregenerator参数传递给add_route.
static这个
static参数传递给add_route.
use_global_views这个
use_global_views参数传递给add_route.
object这个
pyramid.interfaces.IRoute对象,用于对此路由执行匹配和生成。
security policy
会有一个而且只有一个内省在
security policy类别。它表示对pyramid.config.Configurator.set_security_policy()方法(或其配置器构造函数等效项)。它将包含以下数据:
policy策略对象(已解决
policy参数set_security_policy)
authentication policy
会有一个而且只有一个内省在
authentication policy类别。它表示对pyramid.config.Configurator.set_authentication_policy()方法(或其配置器构造函数等效)。它将包含以下数据。
policy策略对象(已解决
policy参数set_authentication_policy)
authorization policy
会有一个而且只有一个内省在
authorization policy类别。它表示对pyramid.config.Configurator.set_authorization_policy()方法(或其配置器构造函数等效)。它将包含以下数据。
policy策略对象(已解决
policy参数set_authorization_policy)
default permission
会有一个而且只有一个内省在
default permission类别。它表示对pyramid.config.Configurator.set_default_permission()方法(或其配置器构造函数等效)。它将包含以下数据。
value传递给的权限名称
set_default_permission.
default csrf options
会有一个而且只有一个内省在
default csrf options类别。它表示对pyramid.config.Configurator.set_default_csrf_options()方法。它将包含以下数据。
require_csrf的默认值
require_csrf如果在呼叫时未指定pyramid.config.Configurator.add_view().
token在中搜索的令牌的名称
request.POST找到有效的CSRF令牌。
header搜索以查找有效CSRF令牌的请求头的名称。
safe_methods被视为安全且不受CSRF检查的HTTP方法列表。
views
每个反省在
views类别表示调用pyramid.config.Configurator.add_view(). 每个都有以下数据。
name这个
name参数传递给add_view.
context(解决)
context参数传递给add_view.
containment(解决)
containment参数传递给add_view.
request_param这个
request_param参数传递给add_view.
request_methods请求方法名称的序列由
request_method参数传递给add_view或价值None如果Arequest_method未提供参数。
route_name这个
route_name参数传递给add_view.
attr这个
attr参数传递给add_view.
xhr这个
xhr参数传递给add_view.
accept这个
accept参数传递给add_view.
header这个
header参数传递给add_view.
path_info这个
path_info参数传递给add_view.
match_param这个
match_param参数传递给add_view.
csrf_token这个
csrf_token参数传递给add_view.
callable(解决)
view参数传递给add_view. 表示可调用的“原始”视图。
derived_callable可调用的视图来自
view参数传递给add_view. 表示金字塔本身调用的视图可调用(包装在安全和其他包装中)。
mapper(解决)
mapper参数传递给add_view.
decorator(解决)
decorator参数传递给add_view.
permissions
每个反省在
permissions类别表示调用pyramid.config.Configurator.add_view()有明确的permission论点 or 对…的呼唤pyramid.config.Configurator.set_default_permission(). 每个都有以下数据。
value传递给的权限名称
add_view或set_default_permission.
templates
每个反省在
templates类别表示调用pyramid.config.Configurator.add_view()那有renderer指向模板的参数。每个都有以下数据。
name渲染器的名称(字符串)。
type渲染器的类型(字符串)。
renderer这个
pyramid.interfaces.IRendererInfo表示此模板的呈现器的对象。
view mappers
每个反省在
view mappers类别表示调用pyramid.config.Configurator.add_view()有明确的mapper论点 or 对…的呼唤pyramid.config.Configurator.set_view_mapper(). 每个都有以下数据。
mapper(解决)
mapper参数传递给add_view或set_view_mapper.
asset overrides
每个反省在
asset overrides类别表示调用pyramid.config.Configurator.override_asset(). 每个都有以下数据。
to_override这个
to_override参数(资产规格)传递给override_asset.
override_with这个
override_with参数(资产规格)传递给override_asset.
translation directories
每个反省在
translation directories类别表示specs参数传递给pyramid.config.Configurator.add_translation_dirs(). 每个都有以下数据。
directory转换目录的绝对路径。
spec资产规格传递给
add_translation_dirs.
tweens
每个反省在
tweens类别表示调用pyramid.config.Configurator.add_tween(). 每个都有以下数据。
name以字符串形式传递给Tween工厂的点状名称(作为
tween_factory参数add_tween)
factory工厂对象之间的(已解决的)。
type
implicit或explicit作为字符串。
under这个
under参数传递给add_tween(字符串)
over这个
over参数传递给add_tween(字符串)
static views
每个反省在
static views类别表示调用pyramid.config.Configurator.add_static_view(). 每个都有以下数据。
name这个
name参数提供给add_static_view.
spec标准化版本的
spec参数提供给add_static_view.
traversers
每个反省在
traversers类别表示调用pyramid.config.Configurator.add_traverser(). 每个都有以下数据。
iface表示将使用此遍历器的根工厂的返回值的(已解析)接口或类对象。
adapter(解析的)遍历器类。
resource url adapters
每个反省在
resource url adapters类别表示调用pyramid.config.Configurator.add_resource_url_adapter(). 每个都有以下数据。
adapter(已解析)资源URL适配器类。
resource_iface表示为其注册此URL适配器的资源接口的(已解析)接口或类对象。
request_iface表示为其注册此URL适配器的请求接口的(已解析)接口或类对象。
工具栏中的自省¶
金字塔调试工具栏( pyramid_debugtoolbar package)提供所有注册自省及其关系的隐藏视图。它当前位于主导航中的“全局”选项卡下,如下所示:
 
禁用内省¶
你可以通过传递标志来禁用金字塔内省。 introspection=False 到 Configurator 应用程序设置中的构造函数:
from pyramid.config import Configurator
config = Configurator(..., introspection=False)
什么时候? introspection 是 False ,将丢弃由配置指令生成的所有自省。
 
