Что такое WSGI и зачем он нужен для Django?
WSGI (Web Server Gateway Interface) – это стандартный интерфейс между веб-серверами и Python-приложениями, в том числе Django. Он позволяет вашему Django-приложению взаимодействовать с веб-сервером, таким как IIS (Internet Information Services). Без WSGI веб-сервер не сможет понять, как обрабатывать Python-код вашего приложения.
Обзор IIS как веб-сервера для Django-приложений
IIS – это веб-сервер, разработанный Microsoft. Хотя традиционно IIS ассоциируется с ASP.NET, он вполне пригоден для хостинга Django-приложений с использованием WSGI. Преимущества использования IIS включают интеграцию с Windows Server, простоту настройки (после освоения) и надежность.
Почему важна правильная настройка переменных окружения?
Переменные окружения предоставляют конфигурационную информацию вашему Django-приложению во время выполнения. Неправильно настроенные переменные, такие как PYTHONPATH и DJANGO_SETTINGS_MODULE, могут привести к тому, что приложение не сможет найти необходимые модули или файл настроек, что вызовет ошибки и сбои.
Необходимые компоненты и подготовка среды
Установка Python и Django
Убедитесь, что у вас установлен Python. Рекомендуется использовать последнюю стабильную версию. Django можно установить с помощью pip:
pip install django
Рекомендуется использовать виртуальное окружение для каждого проекта Django. Создайте и активируйте виртуальное окружение:
python -m venv venv
venv\Scripts\activate # В Windows
source venv/bin/activate # В Linux/macOS
Установка и настройка IIS (Internet Information Services)
IIS устанавливается через панель управления Windows: «Панель управления» -> «Программы» -> «Включение или отключение компонентов Windows». Включите «Службы IIS» и все необходимые компоненты, такие как «CGI» в разделе «Службы приложений». Перезагрузите сервер после установки.
Установка и настройка wfastcgi (WSGI Handler для IIS)
wfastcgi – это расширение IIS, которое позволяет запускать Python-приложения WSGI. Установите его через pip:
pip install wfastcgi
После установки, зарегистрируйте wfastcgi в IIS. Перейдите в директорию, где установлен Python (например, C:\Program Files\Python39) и выполните:
python wfastcgi.py --install
Настройка переменных окружения WSGI в IIS
Определение необходимых переменных окружения (PYTHONPATH, DJANGOSETTINGSMODULE)
PYTHONPATH: Указывает Python, где искать модули. Обычно содержит путь к вашему проекту Django и виртуальному окружению.DJANGO_SETTINGS_MODULE: Указывает Django, какой файл настроек использовать. Обычно этоyour_project.settings.
Настройка переменных окружения через GUI IIS Manager
- Откройте IIS Manager (выполните
inetmgrв командной строке). - Выберите ваш веб-сайт в левой панели.
- Дважды щелкните на «Application Settings».
- Добавьте переменные окружения
PYTHONPATHиDJANGO_SETTINGS_MODULEс соответствующими значениями.
Настройка переменных окружения через web.config
Переменные окружения также можно настроить в файле web.config. Этот метод позволяет хранить конфигурацию вместе с вашим приложением. Пример будет показан ниже, в разделе «Конфигурация web.config для Django».
Конфигурация web.config для Django
Пример минимальной конфигурации web.config
Вот пример минимального файла web.config:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="PythonHandler" path="*" verb="*" modules="FastCgiModule" scriptProcessor="C:\path\to\your\venv\Scripts\python.exe|C:\path\to\your\venv\Scripts\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" />
</handlers>
<rewrite>
<rules>
<rule name="Static Files" stopProcessing="true">
<match url="(.*\.css$|.*\.js$|.*\.gif$|.*\.jpg$|.*\.png$)" ignoreCase="true" />
<action type="Rewrite" url="static/{R:1}" appendQueryString="false" />
</rule>
<rule name="Configure Django" stopProcessing="true">
<match url="(.*)" ignoreCase="false" />
<action type="Rewrite" url="index.wsgi/{R:1}" />
</rule>
</rules>
</rewrite>
<security>
<requestFiltering>
<hiddenSegments>
<add segment="index.wsgi" />
</hiddenSegments>
</requestFiltering>
</security>
<httpErrors errorMode="Detailed" />
</system.webServer>
<appSettings>
<add key="PYTHONPATH" value="C:\path\to\your\project" />
<add key="DJANGO_SETTINGS_MODULE" value="your_project.settings" />
</appSettings>
</configuration>
Замените C:\path\to\your\venv и C:\path\to\your\project на соответствующие пути к вашему виртуальному окружению и проекту Django.
Разъяснение ключевых параметров в web.config
<handlers>: Определяет обработчик для Python-приложения.scriptProcessorуказывает на интерпретатор Python и скриптwfastcgi.py.<rewrite>: Используется для перенаправления всех запросов к вашему Django-приложению. В данном примере, все запросы перенаправляются наindex.wsgi.<appSettings>: Содержит переменные окружения, такие какPYTHONPATHиDJANGO_SETTINGS_MODULE. IIS автоматически устанавливает эти переменные для вашего приложения.
Настройка статических файлов (CSS, JavaScript, изображения)
Статические файлы не обрабатываются Django напрямую. IIS должен обслуживать их напрямую. В web.config используется правило rewrite, которое перенаправляет запросы к статическим файлам в директорию static. Убедитесь, что вы выполнили команду python manage.py collectstatic и поместили статические файлы в директорию static внутри вашего проекта.
Устранение неполадок и распространенные ошибки
Ошибка: ‘The WSGI application could not be loaded’
Эта ошибка обычно указывает на проблемы с путем к WSGI-скрипту или проблемами в самом скрипте. Проверьте путь к index.wsgi в web.config и убедитесь, что в скрипте нет синтаксических ошибок.
Ошибка: ‘ImportError: No module named django.core.wsgi’
Эта ошибка означает, что Python не может найти модуль django.core.wsgi. Убедитесь, что PYTHONPATH настроен правильно и указывает на директорию с Django.
Проверка правильности настроек переменных окружения
Вы можете проверить значения переменных окружения, распечатав их в вашем Django-приложении. Например, в views.py:
import os
from django.http import HttpResponse
def my_view(request):
path = os.environ.get('PYTHONPATH', 'Not found')
settings = os.environ.get('DJANGO_SETTINGS_MODULE', 'Not found')
return HttpResponse(f'PYTHONPATH: {path}<br>DJANGO_SETTINGS_MODULE: {settings}')
Советы по отладке и логированию WSGI приложений в IIS
- Включите подробные сообщения об ошибках в IIS (в
web.configустановитеhttpErrors errorMode="Detailed"). - Используйте логирование в вашем Django-приложении для записи информации об ошибках и исключениях. Например, можно использовать встроенный модуль
loggingв Python. - Проверьте логи IIS для поиска дополнительных сведений об ошибках. Логи находятся в директории
%SystemDrive%\inetpub\logs\LogFiles.