Развёртывание с WSGI

Основной платформой для развертывания Django является WSGI, это фактически стандарт для веб-серверов и приложений на Python.

Команда startproject установит простую конфигурацию по-умолчанию, которую вы можете впоследствии изменить под нужды вашего проекта и использовать с любым WSGI-совместимым веб-сервером. Django предоставляет следующую документацию касаемо веб-серверов:

Объект application

Одна из ключевых концепций развертывания с WSGI заключается в указании объекта application, который веб-сервер использует для взаимодействия с вашим кодом.

Изменено в Django 1.4.

Команда startproject создаст файл projectname/wsgi.py, необходимый для работы с веб-сервером.

Примечание

Вы обновили Django с предыдущего релиза и не обнаружили файла wsgi.py в проекте? Можете самостоятельно добавить его в корень проекта (рядом с settings.py и urls.py), с содержанием, данным ниже. Если вы хотите, чтобы WSGI мог работать с командой runserver, добавьте в настройки WSGI_APPLICATION = "mysite.wsgi.application" (заменив mysite на имя вашего проекта).

Изначально этот файл содержит:

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

# This application object is used by the development server
# as well as any WSGI server configured to use this file.
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

Строка os.environ.setdefault содержит список настроек используемых модулей, на случай если вы еще не задали явно переменную DJANGO_SETTINGS_MODULE. Вам нужно будет изменить эту строку, заменив mysite на имя вашего проекта, чтобы путь к настройкам вашего проекта был правильным.

Чтобы использовать WSGI middleware можно просто обернуть объект приложения в том же файле:

from helloworld.wsgi import HelloWorldApplication
application = HelloWorldApplication(application)

Также вы можете заменить WSGI-приложение, предоставляемое с Django, если хотите совместить приложения Django с приложениями другого фреймворка.

Примечание

Некоторые сторонние WSGI middleware не вызывают метод close объекта ответа после обработки запроса — самым извесным является middleware Sentry(до 2.0.7 версии) для обработки ошибок. В таких случаях сигнал request_finished не отсылается. Это может привести к простою подключений к базе данных или серверам memcache.