Команда runserver: настройки сервера разработки
Основные способы запуска сервера разработки Django
Наиболее эффективный и простой способ запустить сервер для разработки - использовать команду python manage.py runserver без дополнительных аргументов. Этот вариант подходит для локальной отладки: сервер автоматически запускается на адресе 127.0.0.1:8000 и при каждом изменении кода перезагружается (если не отключено).
python manage.py runserverPython manage runserver (запуск сервера django (manage.py runserver))
Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). April 09, 2025 - 12:00:00 Django version 4.2, using settings 'myproject.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
Как запустить сервер на другом порту, если 8000 занят?
Добавьте номер порта первым аргументом. Например, порт 8080:
python manage.py runserver 8080
Starting development server at http://127.0.0.1:8080/
lsof -ti:8000 | xargs kill; в Windows: netstat -aon | findstr :8000 и завершите процесс через Task Manager).Как сделать сервер доступным для других устройств в локальной сети?
Укажите IP-адрес 0.0.0.0 (слушает все интерфейсы) и при необходимости порт:
python manage.py runserver 0.0.0.0:8000
Starting development server at http://0.0.0.0:8000/
settings.py в ALLOWED_HOSTS добавлен этот IP или '*' для разработки. Не используйте 0.0.0.0 в публичных сетях - сервер не защищён.Как использовать другой файл настроек (например, для продакшна)?
Параметр --settings принимает путь к модулю настроек (в формате Python):
python manage.py runserver --settings=myproject.settings.production
Performing system checks... Django version 4.2, using settings 'myproject.settings.production' Starting development server at http://127.0.0.1:8000/
Как отключить автоматическую перезагрузку сервера при изменении файлов?
Ключ --noreload:
python manage.py runserver --noreload
Performing system checks... System check identified no issues (0 silenced). April 09, 2025 - 12:00:00 Django version 4.2, using settings 'myproject.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C. (No file watching message)
Как запустить сервер на конкретном IPv6-адресе?
Укажите адрес с квадратными скобками:
python manage.py runserver [::1]:8000
Starting development server at http://[::1]:8000/
Как указать другой IP-адрес (не 127.0.0.1), не используя 0.0.0.0?
Например, для локального IP 192.168.1.100:
python manage.py runserver 192.168.1.100:8000
Как запустить сервер, если manage.py находится не в корне проекта?
Перейдите в каталог с manage.py или укажите полный путь:
cd /path/to/project && python manage.py runserver
python /path/to/project/manage.py runserver
Как использовать альтернативный способ запуска через python -m django?
python -m django runserver 8000
Watching for file changes with StatReloader... Starting development server at http://127.0.0.1:8000/
DJANGO_SETTINGS_MODULE=myproject.settings python -m django runserver
Типичные проблемы и их решения
Ошибка 'Error: That port is already in use'.
Освободите порт (см. выше) или укажите другой.
Ошибка 'Permission denied' для портов ниже 1024.
Используйте порт выше 1024 или запустите с sudo (не рекомендуется для разработки).
Статические файлы не отображаются.
В режиме разработки Django сам раздаёт статику, если в urls.py добавлены соответствующие маршруты (обычно + static(...)). Проверьте настройки STATIC_URL и DEBUG=True.
Сервер не видит изменения в коде.
Убедитесь, что не включён --noreload, и перезапустите сервер вручную.
Ошибка 'Invalid HTTP_HOST header' при доступе с другого хоста.
Добавьте хост в ALLOWED_HOSTS в settings.py.
Расширенные примеры использования runserver
1. Одновременный запуск нескольких серверов на разных портах (разные проекты)
# Терминал 1: проект A на порту 8000
cd ~/projects/project_a && python manage.py runserver 8000
# Терминал 2: проект B на порту 8001
cd ~/projects/project_b && python manage.py runserver 8001
Проект A: Starting development server at http://127.0.0.1:8000/ Проект B: Starting development server at http://127.0.0.1:8001/
2. Запуск с определённым файлом настроек и отключением перезагрузки
python manage.py runserver 9000 --settings=myapp.settings.staging --noreload
Django version 4.2, using settings 'myapp.settings.staging' Starting development server at http://127.0.0.1:9000/ Quit the server with CONTROL-C. (No reloader output)
3. Использование IPv6 и явного адреса с портом 80 (требуются права)
sudo python manage.py runserver [::]:80
Starting development server at http://[::]:80/ (Сервер слушает все IPv6-интерфейсы на порту 80)
4. Запуск сервера через python -m django с явной установкой модуля настроек
export DJANGO_SETTINGS_MODULE=myproject.settings.development
python -m django runserver 0.0.0.0:8000
Watching for file changes with StatReloader Starting development server at http://0.0.0.0:8000/
5. Запуск фонового процесса (Linux/macOS) и его завершение
python manage.py runserver &
# Сервер запущен в фоне, PID сохранён
# Позже завершить:
kill %1
[1] 12345 (PID) Starting development server at http://127.0.0.1:8000/
6. Использование переменной окружения для порта
export PORT=8888
python manage.py runserver $PORT
Starting development server at http://127.0.0.1:8888/
7. Запуск сервера с автоматическим выбором свободного порта (через скрипт)
# bash скрипт
port=$(python -c "import socket; s=socket.socket(); s.bind(('',0)); print(s.getsockname()[1]); s.close()")
python manage.py runserver $port
Starting development server at http://127.0.0.1:12345/ (случайный свободный порт)
8. Обработка ошибки 'Error: That port is already in use'
# Узнать PID процесса, занимающего порт 8000
lsof -ti:8000 | xargs kill -9
# Затем запустить снова
python manage.py runserver
(После kill) Starting development server at http://127.0.0.1:8000/