Готовый перевод Pyramid Documentation / Документация Pyramid: narr/configuration.rst

.. index::
single: application configuration

.. _configuration_narr:

Конфигурация приложения
======================

Каждая установка приложения написанного на :app:Pyramid создает специфичную *конфигурацию*. Например приложение хранящие MP3 файлы, подключает код для управления музыкальными файлами. А например приложение для корпоративного использования, может подключать код для управления данными о пользователях. Способ которым код подключается к приложению на :app:Pyramid называется "конфигурация".

Большинство людей понимают "конфигурацию", как настройки экземпляра приложения. Например легко думать, что значения определенные в .ini файле, считываются при запуске приложения как "конфигурация". :app:Pyramid расширяет это понятие , называя так стандартные способы подключения внешнего кода. Когда вы подключаете код к :app:Pyramid вы "конфигурируете" приложение.

.. index::
single: imperative configuration

.. _imperative_configuration:

Императивная конфигурация
--------------------------------------------

Вот несколько простейших приложений :app:Pyramid, сконфигурированных императивно:

.. code-block:: python
:linenos:

from paste.httpserver import serve
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_view(hello_world)
app = config.make_wsgi_app()
serve(app, host='0.0.0.0')

Мы пока не будем обсуждать, что делает приложение. Просто запомните, что конфигурационные выражения вида if __name__ ==
'__main__': заменяются вызовами методов класса :term:Configurator (к примеру config.add_view(...)). Эти утверждения находятся одни за другими, и выполняются в порядке следования.

.. index::
single: view_config
single: configuration decoration
single: code scanning

.. _decorations_and_code_scanning:

Декораторы и обработка кода
--------------------------------------------

Другой вариант конфигурации, делает её более приближенной к самому коду. Иногда сложно держать конфигурацию отдельно, когда код занимает несколько файлов. Тогда, чтобы увидеть проект целостно, вам придется работать с множеством файлов. :app:Pyramid позволяет вам избежать этого. К примеру :

.. code-block:: python
:linenos:

from pyramid.response import Response
from pyramid.view import view_config

@view_config(name='hello', request_method='GET')
def hello(request):
return Response('Hello')

Но есть тонкость, что простая декорация не записывает никаких изменений в конфигурации. Для оказания эффекта на конфигурацию, необходимо провести процесс :term:сканирования

Например декоратор :class:pyramid.view.view_config, в примере добавляет атрибуты к функции hello, делая их доступными для последующего сканирования.

:term:сканирование модуля какого либо пакета и его под-пакетов на декораторы, происходит когда вызывается метод :meth:pyramid.config.Configurator.scan: сканирование запускает поиски конфигурации в пакете. К примеру:

.. topic:: Starting A Scan

.. code-block:: python
:linenos:

from paste.httpserver import serve
from pyramid.response import Response
from pyramid.view import view_config

@view_config()
def hello(request):
return Response('Hello')

if __name__ == '__main__':
from pyramid.config import Configurator
config = Configurator()
config.scan()
app = config.make_wsgi_app()
serve(app, host='0.0.0.0')

Механизм сканирования импортирует каждый модуль рекурсивно, находя специальные атрибуты обьектов определенных в модуле.Эти атрибуты определяются в коде обыкновенно, с помощью декораторов. Например декоратор :class:~pyramid.view.view_config может быть назначен функции или методу.

Когда сканирование запущенно, и декораторы конфигурации найдены сканером, ряд вызовов совершается к классу :term:Configurator от вашего имени :они заменяют необходимость делать императивную конфигурацию.

В примере сверху, сканер переводит аргументы class:~pyramid.view.view_config в вызовы метода :meth:pyramid.config.Configurator.add_view.

.. ignore-next-block
.. code-block:: python
:linenos:

config.add_view(hello)

Декларативная конфигурация
----------------------------------------------

Третий вид конфигурации :app:Pyramid называется *декларативная конфигурация*. Этот режим использует XML базированный язык разметки :term:ZCML для конфигурации. ZCML не встроен в Pyramid. Вы можете использовать его, установив пакет :term:pyramid_zcml.

Переведено на Нотабеноиде
http://notabenoid.org/book/17677/58165

Переводчики: uhbif19

Настройки

Готово:

100.00% КП = 1.0