Spec-Zone.ru › Werkzeug 1.0

Обслуживание WSGI-приложений

Существует множество способов обслуживания WSGI-приложения. Во время разработки вам обычно не нужен полнофункциональный веб-сервер, например, Apache, а вместо этого — простой автономный сервер. Именно поэтому Werkzeug поставляется со встроенным сервером разработки.

Самый простой способ — создание небольшого start-myproject.py файла, который запускает приложение с помощью встроенного сервера:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from werkzeug.serving import run_simple
from myproject import make_app

app = make_app(...)
run_simple('localhost', 8080, app, use_reloader=True)

Вы также можете передать ему extra_files ключевое слово со списком дополнительных файлов (например, файлов конфигурации), за которыми вы хотите наблюдать.

werkzeug.serving.run_simple(hostname, port, application, use_reloader=False, use_debugger=False, use_evalex=True, extra_files=None, reloader_interval=1, reloader_type='auto', threaded=False, processes=1, request_handler=None, static_files=None, passthrough_errors=False, ssl_context=None)

Запуск WSGI-приложения. Дополнительные возможности включают поддержку перезагрузки, многопоточности и форков.

Эта функция также имеет интерфейс командной строки:

python -m werkzeug.serving --help
Журнал изменений

Изменено в версии 0.15: Связь с сокетом Unix, передавая путь, начинающийся с unix:// в качестве hostname.

Добавлена в версии 0.10: Улучшена поддержка перезагрузки и добавлена поддержка изменения бэкенда через параметр reloader_type. Для получения дополнительной информации см. Перезагрузчик.

Добавлена в версии 0.9: Добавлен интерфейс командной строки.

Добавлена в версии 0.8: Добавлена поддержка автоматической загрузки контекста SSL из файла сертификата и закрытого ключа.

Добавлена в версии 0.6: была добавлена поддержка SSL.

Добавлена в версии 0.5: static_files был добавлен для упрощения обслуживания статических файлов, а также passthrough_errors.

Параметры:
  • hostname – Хост для привязки, например 'localhost'. Если значение представляет собой путь, начинающийся с unix://, оно будет привязано к сокету Unix вместо TCP-сокета.
  • port – Порт сервера. Например: 8080
  • application – WSGI-приложение для выполнения
  • use_reloader – должен ли сервер автоматически перезапускать процесс Python, если были изменены модули?
  • use_debugger – нужно ли использовать систему отладки werkzeug?
  • use_evalex – нужно ли включить функцию оценки исключений?
  • extra_files – список файлов, за которыми должен следить перезагрузчик дополнительно к модулям. Например, файлы конфигурации.
  • reloader_interval – интервал перезагрузки в секундах.
  • reloader_type – тип используемого перезагрузчика. По умолчанию используется автоматическое определение. Допустимые значения: 'stat' и 'watchdog'. Для получения дополнительной информации см. Перезагрузчик.
  • threaded – должен ли процесс обрабатывать каждый запрос в отдельном потоке?
  • processes – если больше 1, то обрабатывать каждый запрос в новом процессе до максимального числа одновременных процессов.
  • request_handler – необязательный параметр, который может использоваться для замены стандартного обработчика. Вы можете использовать его для замены на другой BaseHTTPRequestHandler подкласс.
  • static_files – список или словарь путей для статических файлов. Это работает точно так же, как SharedDataMiddleware, это фактически просто оборачивает приложение в этот промежуточный слой перед обслуживанием.
  • passthrough_errors – установите это в значение True для отключения обработки ошибок. Это означает, что сервер умрёт при ошибках, но может быть полезно для подключения отладчиков (pdb и т. д.)
  • ssl_context – контекст SSL для подключения. Либо ssl.SSLContext, кортеж в форме (cert_file, pkey_file), строка 'adhoc' , если сервер должен автоматически создать один, или None для отключения SSL (по умолчанию).
werkzeug.serving.is_running_from_reloader()

Проверяет, запускается ли приложение из подпроцесса перезагрузчика Werkzeug.

Журнал изменений

Добавлена в версии 0.10.

werkzeug.serving.make_ssl_devcert(base_path, host=None, cn=None)

Создает SSL-ключ для разработки. Это следует использовать вместо ключа 'adhoc', который генерирует новый сертификат при каждом запуске сервера. Он принимает путь к расположению ключа и сертификата и либо имя хоста, либо CN. Если указан хост, будет использоваться CN *.host/CN=host.

Для получения дополнительной информации см. run_simple().

Журнал изменений

Добавлена в версии 0.9.

Параметры:
  • base_path – путь к сертификату и ключу. Расширение .crt добавляется для сертификата, .key добавляется для ключа.
  • host – имя хоста. Это может быть использовано как альтернатива для cn.
  • cn – используемый CN.

Информация

Сервер разработки не предназначен для использования в производственных системах. Он был разработан специально для целей разработки и плохо работает при высокой нагрузке. Для развертывания см. страницы Развертывание приложений.

Перезагрузчик

Журнал изменений

Изменено в версии 0.10.

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

Начиная с версии 0.10, перезагрузчик поддерживает два бэкенда: stat и watchdog.

  • По умолчанию stat бэкенд просто проверяет mtime всех файлов с регулярным интервалом. Этого достаточно для большинства случаев, однако известно, что это сильно разряжает аккумулятор ноутбука.
  • watchdog бэкенд использует события файловой системы и значительно быстрее, чем stat. Для его работы требуется модуль watchdog. Рекомендуемый способ установки — добавление Werkzeug[watchdog] в ваш файл требований.

Если watchdog установлен и доступен, он будет автоматически использоваться вместо встроенного stat перезагрузчика.

Чтобы переключиться между бэкендами, можно использовать параметр reloader_type функции run_simple(). 'stat' устанавливает его по умолчанию — на основе проверки статуса, а 'watchdog' принудительно переключает на бэкенд watchdog.

Примечание

Некоторые частные случаи, такие как модули, которые не смогли правильно импортироваться, не обрабатываются перезагрузчиком на основе статуса по соображениям производительности. Перезагрузчик watchdog следит и за такими файлами.

Цветной вывод журнала

Сервер разработки может по желанию выделять записи в журнале запросов разными цветами в зависимости от кода состояния. Установите Click для активации этой функции.

Виртуальные хосты

Многие веб-приложения используют несколько доменных имен. Это может быть немного сложно смоделировать локально. К счастью, для этого можно использовать файл hosts.

Это позволяет вам называть ваш локальный компьютер yourapplication.local и api.yourapplication.local (или что-то другое) в дополнение к localhost.

Вы можете найти файл hosts по следующим путям:

Windows %SystemRoot%\system32\drivers\etc\hosts
Linux / OS X /etc/hosts

Вы можете открыть этот файл в вашем любимом текстовом редакторе и добавить новое имя после localhost:

127.0.0.1       localhost yourapplication.local api.yourapplication.local

Сохраните изменения, и через некоторое время вы сможете обращаться к серверу разработки и по этим именам хостов. Вы можете использовать систему маршрутизации URL, чтобы распределять запросы между различными хостами, или самостоятельно парсить request.host.

Остановка сервера

Журнал изменений

Добавлена в версии 0.7.

Начиная с Werkzeug 0.7, сервер разработки предоставляет способ остановки сервера после обработки запроса. Пока это работает только с Python 2.6 и выше и только с сервером разработки. Для инициации остановки необходимо вызвать функцию с именем 'werkzeug.server.shutdown' в среде WSGI:

def shutdown_server(environ):
    if not 'werkzeug.server.shutdown' in environ:
        raise RuntimeError('Not running the development server')
    environ['werkzeug.server.shutdown']()

Устранение неполадок

На операционных системах, которые поддерживают IPv6 и имеют его настроенным, например, на современных системах Linux, OS X 10.4 или выше, а также Windows Vista, некоторые браузеры могут быть очень медленными при доступе к локальному серверу. Причиной этого является то, что иногда «localhost» настроен для доступности как по IPv4, так и по IPv6 сокетам, и некоторые браузеры будут пытаться получить доступ к IPv6 сначала, а затем к IPv4.

В настоящее время интегрированный веб-сервер не поддерживает одновременный доступ по IPv6 и IPv4, а для лучшей переносимости используется IPv4 по умолчанию.

Если вы заметили, что веб-браузер долго загружает страницу, есть два способа решить эту проблему. Если вам не нужна поддержка IPv6, вы можете отключить запись IPv6 в файле hosts, удалив эту строку:

::1             localhost

В качестве альтернативы можно также отключить поддержку ipv6 в вашем браузере. Например, если Firefox демонстрирует такое поведение, вы можете отключить его, перейдя в about:config и отключив ключ network.dns.disableIPv6. Однако это не рекомендуется по состоянию на Werkzeug 0.6.1!

Начиная с Werkzeug 0.6.1, сервер теперь будет переключаться между ipv4 и ipv6 в зависимости от конфигурации вашей операционной системы. Это означает, что если вы отключили поддержку ipv6 в вашем браузере, но ваша операционная система предпочитает ipv6, вы не сможете подключиться к вашему серверу. В этой ситуации вы можете либо удалить запись localhost для ::1, либо явно привязать имя хоста к ipv4-адресу (127.0.0.1)

SSL

Изменения

Новое в версии 0.6.

Встроенный сервер поддерживает SSL для целей тестирования. Если контекст SSL предоставлен, он будет использован. Это означает, что сервер может работать либо в режиме HTTP, либо в режиме HTTPS, но не в обоих одновременно.

Быстрый старт

Самый простой способ разработки с SSL с помощью Werkzeug — это сгенерировать сертификат SSL и закрытый ключ, сохранить их где-нибудь и затем поместить их туда. Для сертификата вам необходимо указать имя вашего сервера при генерации или CN.

  1. Сгенерируйте SSL-ключ и сохраните его где-нибудь:

    >>> from werkzeug.serving import make_ssl_devcert
    >>> make_ssl_devcert('/path/to/the/key', host='localhost')
    ('/path/to/the/key.crt', '/path/to/the/key.key')
    
  2. Теперь эту кортеж можно передать в качестве ssl_context методу run_simple():

    run_simple('localhost', 4000, application,
               ssl_context=('/path/to/the/key.crt',
                            '/path/to/the/key.key'))
    

Вам нужно будет подтвердить сертификат в вашем браузере один раз.

Загрузка контекстов вручную

В Python 2.7.9 и 3+ у вас также есть возможность использовать объект ssl.SSLContext вместо простой кортежи. Таким образом, вы получите больший контроль над поведением SSL встроенного сервера Werkzeug:

import ssl
ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
ctx.load_cert_chain('ssl.cert', 'ssl.key')
run_simple('localhost', 4000, application, ssl_context=ctx)

Генерация сертификатов

Ключ и сертификат можно создать заранее с помощью инструмента openssl вместо make_ssl_devcert(). Для этого необходимо, чтобы команда openssl была установлена в вашей системе:

$ openssl genrsa 1024 > ssl.key
$ openssl req -new -x509 -nodes -sha1 -days 365 -key ssl.key > ssl.cert

Временные сертификаты

Самый простой способ включить SSL — запустить сервер в режиме adhoc. В этом случае Werkzeug сгенерирует для вас SSL-сертификат:

run_simple('localhost', 4000, application,
           ssl_context='adhoc')

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

Для этой функции требуется библиотека cryptography.

Сокеты Unix

Разработчик сервер может привязываться к сокету Unix вместо TCP-сокета. run_simple() будет привязываться к сокету Unix, если параметр hostname начинается с 'unix://'.

from werkzeug.serving import run_simple
run_simple('unix://example.sock', 0, app)

© 2007–2020 Pallets
Licensed under the BSD 3-clause License.
https://werkzeug.palletsprojects.com/en/1.0.x/serving/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API