Pyramid Documentation / Документация Pyramid: narr/configuration.rst

Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

.. index::
single: application configuration

uhbif19 17.04.11 в 16:38

0

.. _configuration_narr:

uhbif19 17.04.11 в 16:38

0

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

uhbif19 17.04.11 в 16:38

0

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

uhbif19 18.04.11 в 15:25

0

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

uhbif19 20.04.11 в 17:12

0

.. index::
single: imperative configuration

uhbif19 22.04.11 в 04:15

0

.. _imperative_configuration:

uhbif19 22.04.11 в 04:15

0

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

uhbif19 22.04.11 в 04:16

0

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

uhbif19 23.04.11 в 19:05

0

.. code-block:: python
:linenos:

uhbif19 23.04.11 в 19:05

0

from paste.httpserver import serve
from pyramid.config import Configurator
from pyramid.response import Response

uhbif19 23.04.11 в 19:06

0

def hello_world(request):
return Response('Hello world!')

uhbif19 23.04.11 в 19:06

0

if __name__ == '__main__':
config = Configurator()
config.add_view(hello_world)
app = config.make_wsgi_app()
serve(app, host='0.0.0.0')

uhbif19 23.04.11 в 19:06

0

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

uhbif19 07.05.11 в 22:12

0

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

uhbif19 26.04.11 в 17:25

0

.. _decorations_and_code_scanning:

uhbif19 26.04.11 в 17:25

0

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

uhbif19 26.04.11 в 17:26

0

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

uhbif19 27.04.11 в 17:09

0

.. code-block:: python
:linenos:

uhbif19 27.04.11 в 17:09

0

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

uhbif19 27.04.11 в 17:09

0

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

uhbif19 27.04.11 в 17:09

0

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

uhbif19 07.05.11 в 22:44

0

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

uhbif19 07.05.11 в 22:46

0

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

uhbif19 07.05.11 в 22:48

0

.. topic:: Starting A Scan

uhbif19 07.05.11 в 22:48

0

.. topic:: Starting A Scan

uhbif19 07.05.11 в 22:48

0

.. code-block:: python
:linenos:

uhbif19 07.05.11 в 22:48

0

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

uhbif19 07.05.11 в 22:48

0

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

uhbif19 07.05.11 в 22:48

0

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

uhbif19 07.05.11 в 22:48

0

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

uhbif19 07.05.11 в 22:52

0

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

uhbif19 07.05.11 в 22:57

0

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

uhbif19 07.05.11 в 22:59

0

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

uhbif19 07.05.11 в 22:59

0

config.add_view(hello)

uhbif19 07.05.11 в 23:00

0

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

uhbif19 07.05.11 в 23:00

0

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

uhbif19 07.05.11 в 23:05

0
Минутку...