🐛 Типичные ошибки практикума

⚡ Топ-5 ошибок практикума

  1. Не добавлен приложение в INSTALLED_APPS → Django не видит views и шаблоны
  2. Забыт include() в корневом urls.py → 404 на всех маршрутах приложения
  3. env('KEY') вместо env.bool() для DEBUG → DEBUG всегда строка 'True', никогда не False
  4. Не вызван Env.read_env() → переменные из .env не загружаются
  5. runserver запущен не из папки с manage.py → ModuleNotFoundError

Ошибка 1: Приложение не зарегистрировано в INSTALLED_APPS

Симптом: Django не находит шаблоны, миграции не создаются, URL-маршруты работают, но приложение ведёт себя непредсказуемо.
# НЕПРАВИЛЬНО — приложение не добавлено
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    # first_app не добавлен!
]
# ПРАВИЛЬНО
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'first_app.apps.FirstAppConfig',  # обязательно!
]

Ошибка 2: Забыт include() в корневом urls.py

Симптом: Браузер возвращает ошибку 404 при переходе на /first/.
# НЕПРАВИЛЬНО — маршруты приложения не подключены
urlpatterns = [
    path('admin/', admin.site.urls),
    # first_app.urls не подключён!
]
# ПРАВИЛЬНО
from django.urls import path, include  # не забыть импортировать include!
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('first_app.urls')),
]

Ошибка 3: Неверный тип данных при чтении из .env

Симптом: DEBUG всегда равен строке 'True' даже если в .env написано DEBUG=False. Django считает непустую строку как True.
# НЕПРАВИЛЬНО — возвращает строку, не bool
DEBUG = env('DEBUG')             # строка 'True' или 'False'
ALLOWED_HOSTS = env('ALLOWED_HOSTS')  # строка '127.0.0.1,localhost'
# ПРАВИЛЬНО — используем типизированные методы
DEBUG = env.bool('DEBUG', default=False)
ALLOWED_HOSTS = env.list('ALLOWED_HOSTS', default=[])

Ошибка 4: Env.read_env() не вызван

Симптом: KeyError или ImproperlyConfigured — переменная SECRET_KEY не найдена.
# НЕПРАВИЛЬНО — .env не загружен
from environ import Env
env = Env()
# Env.read_env() не вызван!
SECRET_KEY = env('SECRET_KEY')  # KeyError!
# ПРАВИЛЬНО
from environ import Env
env = Env()
Env.read_env(BASE_DIR / '.env')  # загружаем .env
SECRET_KEY = env('SECRET_KEY')

Ошибка 5: manage.py запущен не из нужной папки

Симптом: ModuleNotFoundError: No module named 'config' или похожая ошибка импорта.
# НЕПРАВИЛЬНО — запуск из папки config/
cd config
python manage.py runserver  # ошибка!
# ПРАВИЛЬНО — запуск из папки где лежит manage.py
cd my-django-project      # корень проекта (здесь лежит manage.py)
python manage.py runserver

Ошибка 6: Неправильное имя view в urls.py

Симптом: AttributeError: module 'first_app.views' has no attribute 'first_app'
# НЕПРАВИЛЬНО — в конспекте источника была опечатка:
urlpatterns = [
    path('first/', views.first_app, name='first_app'),  # first_app != first_view!
]
# ПРАВИЛЬНО — имя функции должно совпадать с определённой во views.py:
urlpatterns = [
    path('first/', views.first_view, name='first_view'),
]
В источнике практикума (задание 10) в решении указано views.first_app, тогда как функция определена как first_view. Используйте first_view — это корректное имя из задания 9.

Ошибка 7: mysqlclient не установлен при MYSQL=True

Симптом: django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named 'MySQLdb'
# РЕШЕНИЕ
pip install mysqlclient

На Windows установка mysqlclient может потребовать Visual C++ Build Tools. В качестве альтернативы можно использовать PyMySQL:

pip install PyMySQL

# В config/__init__.py
import pymysql
pymysql.install_as_MySQLdb()
⚠️ Проверить по документации: актуальные рекомендации по MySQL-драйверу для Django 5.x могут отличаться. Проверьте Django docs: MySQL notes.