在金字塔视图中使用自定义配置

时间:2019-06-18 17:49:19

标签: configuration pyramid

我正在学习金字塔,并且试图在我的一种视图中使用来自development.ini文件的自定义配置。在此示例中,为“ ldap_server”。

development.ini:

[app:main]
use = egg:myapp
pyramid.reload_templates = true
pyramid.includes =
    pyramid_debugtoolbar

ldap_server = 10.10.10.10

[server:main]
use = egg:waitress#main
listen = 0.0.0.0:6543

我发现我可以从myapp/__init__.py的主要函数中访问“ ldap_server”的值。 (以下示例在通过pserve development.ini启动时将显示“ ldap服务器为10.10.10.10”。)

from pyramid.config import Configurator

def main(global_config, **settings):
    config = Configurator(settings=settings)
    config.include('pyramid_jinja2')
    config.include('.routes')
    config.add_static_view(name='static', path='myapp:static')
    config.scan('.views')
    config.scan('.templates')

    ldap_server = settings.get('ldap_server')
    print('The ldap server is ' + ldap_server)

    return config.make_wsgi_app()

也就是说,我想在我的一种视图中使用此值。我正在努力寻找有关如何执行此操作的文档。我已经阅读了一些文档,但是仍然很难理解这一点。

文档:

https://docs.pylonsproject.org/projects/pyramid/en/latest/narr/environment.html#adding-a-custom-setting

具体地说,我试图了解在我的视图中要导入哪些金字塔函数,以及如何访问我在development.ini中定义的“ ldap_server”值。

这是myapp / views / login.py中的当前代码段:

from pyramid.view import view_config, view_defaults
import ldap

@view_defaults(renderer='../templates/login.jinja2')
class TutorialViews(object):
    def __init__(self, request):
        self.request = request
        self.view_name = 'login'

    @view_config(route_name='login')
    def login_page(self):

        ldap_server = [ get value from development.ini ]

        do ldappy stuff...

我已经搜索了几个小时,却不知道该怎么做。这似乎是一件微不足道的事情。如果有人可以给我一个有关如何执行此操作的示例,或将我指向一些提供示例的文档,我将不胜感激。

更新:

下面是有效的解决方案(login.py),以防万一像我这样的人(金字塔的新手)稍后遇到此问题。只需一行更改。感谢谢尔盖(Sergey)在下面的答案中的解释。

from pyramid.view import view_config, view_defaults
import ldap

@view_defaults(renderer='../templates/login.jinja2')
class TutorialViews(object):
    def __init__(self, request):
        self.request = request
        self.view_name = 'login'

    @view_config(route_name='login')
    def login_page(self):

        ldap_server = self.request.registry.settings['ldap_server']

        do ldappy stuff...

1 个答案:

答案 0 :(得分:1)

我认为您应该可以通过request.registry.settings来访问它:

  

如果传递了settings参数,则它应该是Python字典   代表此应用程序的部署设置。这些是   以后可以使用pyramid.registry.Registry.settings检索   属性(又称为request.registry.settings)。

https://docs.pylonsproject.org/projects/pyramid/en/latest/api/config.html