Ниже показаны устаревшие паттерны из лекции и их современные аналоги на Django 5.x. В основном тексте курса используется только современный стиль.
1. Регистрация приложения в INSTALLED_APPS
| Из лекции (старое) | Современное (Django 3.2+) |
# settings.py — только имя модуля
INSTALLED_APPS = [
...
'myapp',
]
|
# settings.py — явный конфигурационный класс
INSTALLED_APPS = [
...
'myapp.apps.MyappConfig',
]
|
Почему изменилось: явное указание AppConfig позволяет корректно работать сигналам, переопределять verbose_name приложения и управлять загрузкой.
2. Тип первичного ключа по умолчанию
| Из лекции (старое — Django до 3.2) | Современное (Django 3.2+) |
# AutoField — 32-bit int (до ~2 млрд записей)
# Устанавливался по умолчанию автоматически
|
# settings.py
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
# BigAutoField — 64-bit int (до 9 * 10^18 записей)
|
Почему изменилось: BigAutoField стал дефолтом с Django 3.2 — защита от переполнения id в больших проектах.
3. NullBooleanField (устарело)
| Из лекции (старое) | Современное (Django 4.0+) |
# NullBooleanField — хранит True/False/NULL
# Устарело в Django 4.0, удалено в 5.0
is_active = models.NullBooleanField()
|
# BooleanField с null=True
is_active = models.BooleanField(null=True)
|
4. Хранение SECRET_KEY
| Из лекции (упрощённо — только для учёбы) | Правильный подход (продакшн) |
# settings.py — НЕБЕЗОПАСНО
SECRET_KEY = 'django-insecure-abc123...'
|
# .env
SECRET_KEY=your-real-secret-key
# settings.py
import environ
env = environ.Env()
environ.Env.read_env(BASE_DIR / '.env')
SECRET_KEY = env('SECRET_KEY')
|
Правило: SECRET_KEY никогда не должен находиться в системе контроля версий. Для локальной разработки используйте .env (который добавлен в .gitignore).
5. Простая регистрация моделей в admin vs ModelAdmin
| Из лекции (базовое) | Рекомендуемый подход |
# admin.py — минимально
from django.contrib import admin
from .models import Book
admin.site.register(Book)
|
# admin.py — с настройкой через декоратор
from django.contrib import admin
from .models import Book
@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
list_display = ['title', 'author', 'published_date']
search_fields = ['title', 'author__name']
list_filter = ['published_date']
ordering = ['-published_date']
|
Почему лучше: декоратор @admin.register — более Pythonic стиль, читаемее. Явный ModelAdmin позволяет полностью кастомизировать отображение.
6. Настройки DATABASES — SQLite vs PostgreSQL
| Лекция (разработка) | Продакшн (PostgreSQL) |
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
|
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': env('DB_NAME'),
'USER': env('DB_USER'),
'PASSWORD': env('DB_PASSWORD'),
'HOST': env('DB_HOST', default='localhost'),
'PORT': env('DB_PORT', default='5432'),
}
}
# pip install psycopg2-binary
|