Как и обычный список настроек, конфигуратор инициализирует начальные значения (либо из файла «*.ini», либо через параметры класса). Отличительной особенностью конфигуратора является то, что по мере выполнения программы настройки могут меняться или добавляться.
В Pyramid существует 2 способа настройки приложений Императивный и Декларативный.
Императивный способ конфигурации означает что команды языка Python будут выполнены одна за другой, последовательно. Ниже пример простого приложения на Пирамиде сконфигурированного императивно.
Примечание
Пример будет доступен по адресу http://localhost:8080/hello/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response
def hello_world(request):
return Response('Hello world!')
if __name__ == '__main__':
config = Configurator()
config.add_route('myHelloRoute', '/hello/')
config.add_view(hello_world, route_name='myHelloRoute')
# Создаем и запускаем WSGI приложение
app = config.make_wsgi_app()
server = make_server('0.0.0.0', 8080, app)
server.serve_forever() |
Иногда бывает сложно выполнить все настройки императивно в одном месте, т.к. приложение обычно состоит из множества файлов. В таком случае, вам придется постоянно перескакивать между файлами, чтобы посмотреть настройки для блока кода из другого файла. Чтобы этого избежать, фреймворк Pyramid позволяет настраивать приложение декларативных способом (configuration decoration), т.е. добавлять настройки как можно ближе к целевому коду, как показано в примере ниже:
1 2 3 4 5 6 | from pyramid.response import Response
from pyramid.view import view_config
@view_config(route_name='myHelloRoute')
def hello_world(request):
return Response('Hello') |
Сам по себе декоратор pyramid.view.view_config
не произведет ни какого
эффекта. Чтобы приложение нашло и применило эти настройки нужно выполнить
метод pyramid.config.Configurator.scan()
(scan). После выполнения
этот метод проходит по всем нижележащим файлам от текущей директории, ищет
декларативное описание настроек и применяет их к проекту.
1 2 3 4 5 6 7 8 9 10 11 12 13 | from wsgiref.simple_server import make_server
from pyramid.config import Configurator
if __name__ == '__main__':
config = Configurator()
config.add_route('myHelloRoute', '/hello/')
config.scan()
# Создаем и запускаем WSGI приложение
app = config.make_wsgi_app()
server = make_server('0.0.0.0', 8080, app)
server.serve_forever() |
В примере выше декоратор view_config
делает то же что
метод pyramid.config.Configurator.add_view()
но более наглядно:
config.add_view(hello_world, route_name='myHelloRoute')
Можно этот пример записать в одном файле:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response
from pyramid.view import view_config
@view_config(route_name='myHelloRoute')
def hello_world(request):
return Response('Hello world!')
if __name__ == '__main__':
config = Configurator()
config.add_route('myHelloRoute', '/hello/')
config.scan()
# Создаем и запускаем WSGI приложение
app = config.make_wsgi_app()
server = make_server('0.0.0.0', 8080, app)
server.serve_forever() |
Вы можете выбрать любой способ конфигурации, который вам понравится. Оба способа полностью эквивалентны и часто используются совместно, решая разные задачи конфигурации приложения более удобным способом.