Домой Edit me on GitHub

2017-09-19

Конфигурация

Как и обычный список настроек, конфигуратор инициализирует начальные значения (либо из файла “*.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), т.е. добавлять настройки как можно ближе к целевому коду, как показано в примере ниже:

Код 98 my-pyramid-app/views.py
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). После выполнения этот метод проходит по всем нижележащим файлам от текущей директории, ищет декларативное описание настроек и применяет их к проекту.

Код 99 my-pyramid-app/__init__.py
 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()

Резюме

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

Previous: Введение Next: Структура приложения