2012-06-05 2 views
12

Существует проект development.ini или production.ini в проекте пирамиды. Добавить свои собственные конфигурационные данные в ини файлов, такие как:Как я могу получить данные ini в пирамиде?

[thrift] 
host = 0.0.0.0 
port = 8080 

, и я хочу использовать конфигурационные данные в одном из файлов р в проекте. Как я могу получить данные без объекта запроса? (Я видел решение, которое использует запрос.)

ответ

21

Вы можете получить доступ к настройкам по адресу request.registry.settings или pyramid.threadlocal.get_current_registry().settings. Это ведет себя как словарь.

Если вы хотите использовать второй, который получает настройки без запроса, я должен вас предупредить. По the doc:

Эта функция должна использоваться крайне редко, как правило, только в единичных кода тестирования. почти всегда обычно бывает ошибкой использовать get_current_registry вне контекста тестирования, потому что его использование делает возможным написать код, который не может быть легко протестирован, а не сценарий.

Любая часть вашего кода, которая нуждается в доступе к настройкам, является частью веб-приложения и должна обращаться к запросу, а не к каким-либо магически доступным глобальным. Вы можете подумать, что у вас есть веская причина, но, вероятно, лучший способ. Если вы хотите обсудить это (возможно, в другом вопросе, если это сложно, как поможет какой-то код), я буду рад помочь вам найти чистый способ сделать это.

+1

Спасибо. Отредактировано, чтобы сделать его более ясным в ответе. Кстати, реестр не является файлом настроек (см. Http://pyramid.readthedocs.org/en/1.3-branch/glossary.html#term-application-registry). – madjar

+0

Обратите внимание, что для добавления пользовательских настроек и использования этого ответа вы не можете добавить его в новый раздел. Вам нужно добавить его в существующий раздел [app: main]. См. [Документация] (http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/environment.html#adding-a-custom-setting). – Zitrax

2

Всякий раз, когда мне интересно, как что-то делать в пирамиде, я обычно ссылаюсь на один из примеров пирамиды на github.

Parsing Example Pyramid Config

Я не знаю, как "pyrmadic" они есть, но они usaully прекрасно работают. Здесь они просто используют ConfigParser так же, как и в любом проекте python для анализа ваших файлов .ini.

-2

Думайте «python», а не «пирамида».

import ConfigParser 

config = ConfigParser.ConfigParser() 
config.read('development.ini') 
db_url = config.get('app:main', 'sqlalchemy.url') 
+1

Пирамида использует 'PasteDeploy' в своей бесконечной мудрости. 'ConfigParser' не будет работать: он не принимает имена' .' в именах ключей. – NuclearPeon

+1

Hardcoding - плохая практика. – karantan

 Смежные вопросы

  • Нет связанных вопросов^_^