金字塔形自省

1.3 新版功能.

当金字塔启动时,每个调用 configuration directive 导致一个或多个 introspectable 要在中注册的对象 introspector . 内省器可以通过应用程序代码进行查询,以获取有关正在运行的应用程序配置的信息。此功能对于调试工具栏、显示某些配置方面的命令行脚本以及启动时配置设置的运行时报告非常有用。

使用内省器

下面是一个从一个叫做金字塔的视图中使用金字塔的内省器的例子:

1
2
3
4
5
6
7
8
9
from pyramid.view import view_config
from pyramid.response import Response

@view_config(route_name='bar')
def show_current_route_pattern(request):
    introspector = request.registry.introspector
    route_name = request.matched_route.name
    route_intr = introspector.get('routes', route_name)
    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__getkeysvaluesitems 方法。例如:

1
2
route_intr = introspector.get('routes', 'edit_user')
pattern = 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() (或等同于配置器构造函数) orfactory 参数传递给 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 如果A request_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 对象,用于对此路由执行匹配和生成。

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 如果A request_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_viewset_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_viewset_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

implicitexplicit 作为字符串。

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)提供所有注册自省及其关系的隐藏视图。它当前位于主导航中的“全局”选项卡下,如下所示:

../_images/tb_introspector.png

禁用内省

你可以通过传递标志来禁用金字塔内省。 introspection=FalseConfigurator 应用程序设置中的构造函数:

from pyramid.config import Configurator
config = Configurator(..., introspection=False)

什么时候? introspectionFalse ,将丢弃由配置指令生成的所有自省。