Что происходит при выполнении команды manage.py runserver в Django?

Ответ

Команда python manage.py runserver запускает легковесный веб-сервер, предназначенный исключительно для разработки. Он не подходит для использования в production из-за низкой производительности и отсутствия проверок безопасности.

Процесс запуска:

  1. Запуск WSGI-сервера. Django использует встроенный в Python модуль wsgiref для создания простого, однопоточного HTTP-сервера. Этот сервер реализует стандарт WSGI (Web Server Gateway Interface) для взаимодействия с самим Django-приложением.

  2. Привязка к адресу и порту (Binding). Сервер начинает "слушать" указанный IP-адрес и порт. По умолчанию это 127.0.0.1:8000, что делает его доступным только на локальной машине.

    • 0.0.0.0:8000 делает сервер доступным со всех сетевых интерфейсов компьютера.
  3. Обработка HTTP-запросов. При поступлении HTTP-запроса сервер передаёт его Django-приложению. Далее запрос проходит через стандартный цикл Django: middleware, URL-маршрутизатор, view-функция и возвращается в виде HTTP-ответа.

Пример запуска:

# Запуск на стандартном порту 8000, доступен только локально
python manage.py runserver

# Запуск на порту 8080, доступен из локальной сети
python manage.py runserver 0.0.0.0:8080

Важные моменты:

  • Если указанный порт уже занят другим процессом, возникнет ошибка OSError: [Errno 98] Address already in use.
  • Для production-окружения используется связка из Application Server (например, Gunicorn или uWSGI) и Web Server (например, Nginx).