Использование пользовательских настроек в пирамидальных представлениях - PullRequest
1 голос
/ 18 июня 2019

Я работаю над изучением 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

Я могу получить доступ к значению "ldap_server" из моей основной функции в myapp/__init__.py,(В приведенном ниже примере будет напечатано «Сервер ldap 10.10.10.10» при запуске через pserve development.ini.)

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

В частности, я пытаюсь понять, какую пирамидуфункции для импорта, на мой взгляд, и как получить доступ к значению 'ldap_server', которое я определил в development.ini.

Вот текущий фрагмент из 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), на случай, если кто-то вроде меня (новичок в Pyramid) столкнется с этим позже.Всего одна линия изменений.Спасибо Сергею за объяснение в ответе ниже.

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 Ответ

1 голос
/ 19 июня 2019

Я думаю, вы сможете получить к нему доступ через request.registry.settings:

Если передан аргумент настроек, это должен быть словарь Python представляющие параметры развертывания для этого приложения. Это позже можно получить с помощью pyramid.registry.Registry.settings атрибут (он же request.registry.settings).

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

...