1. Хранение секретов: из лекции (старое) → современное
Из лекции (старое) — небезопасно:
# config/settings.py — не делайте так!
SECRET_KEY = 'django-insecure-hardcoded-key-in-source-code'
DEBUG = True
ALLOWED_HOSTS = ['*']
Современный подход (Django 5.x + django-environ):
# .env
SECRET_KEY=django-insecure-very-secret-key
DEBUG=True
ALLOWED_HOSTS=127.0.0.1,localhost
# config/settings.py
from environ import Env
env = Env()
Env.read_env(BASE_DIR / '.env')
SECRET_KEY = env('SECRET_KEY')
DEBUG = env.bool('DEBUG', default=False)
ALLOWED_HOSTS = env.list('ALLOWED_HOSTS', default=[])
2. URL-маршрутизация: из лекции (старое) → современное
Из лекции (старое) — Django 1.x, устарело:
# urls.py — Django 1.x
from django.conf.urls import url
urlpatterns = [
url(r'^first/$', views.first_view, name='first_view'),
url(r'^admin/', admin.site.urls),
]
Современный подход (Django 2.x+, актуален в Django 5.x):
# urls.py — Django 5.x
from django.urls import path, re_path
urlpatterns = [
path('first/', views.first_view, name='first_view'),
path('admin/', admin.site.urls),
# re_path используется только если нужны регулярные выражения:
# re_path(r'^article/(?P<pk>\d+)/$', views.article_detail),
]
3. Регистрация приложения: из лекции (старое) → современное
Из лекции (упрощённый вариант):
INSTALLED_APPS = [
...
'first_app', # просто имя модуля
]
Рекомендуемый современный подход:
INSTALLED_APPS = [
...
'first_app.apps.FirstAppConfig', # явный класс конфигурации
]
Явная ссылка на AppConfig позволяет Django правильно инициализировать приложение, применять сигналы и задавать default_auto_field.
4. python-dotenv vs django-environ
| Критерий | python-dotenv | django-environ |
|---|---|---|
| Типизация | Только строки | env.bool(), env.list(), env.db() и др. |
| Django-интеграция | Ручная | Встроенная |
| DATABASE_URL | Нет | env.db() → готовый dict для DATABASES |
| Популярность в Django | Средняя | Высокая |