1. Маршрутизация: url() → path()
Это главное изменение, которое стоит знать при чтении старого кода Django 1.x.
| Из лекции (старое — Django 1.x) |
Современное (Django 2.x+, 5.x) |
from django.conf.urls import url |
from django.urls import path, re_path |
| Regex-паттерны обязательны |
Простые строки по умолчанию |
url(r'^$', views.index) |
path('', views.index) |
url(r'^items/(?P<pk>\d+)/$', views.detail) |
path('items/<int:pk>/', views.detail) |
Старый стиль (из лекции — Django 1.x)
# config/urls.py — УСТАРЕВШИЙ СТИЛЬ
from django.conf.urls import url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', views.index),
url(r'^items/(?P<pk>\d+)/$', views.item_detail),
url(r'^users/(?P<username>[\w-]+)/$', views.user_profile),
]
Современный стиль (Django 2.0+ / Django 5.x)
# config/urls.py — СОВРЕМЕННЫЙ СТИЛЬ
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.index),
path('items/<int:pk>/', views.item_detail),
path('users/<str:username>/', views.user_profile),
path('', include('myapp.urls')),
]
Когда нужен regex? Используйте
re_path() вместо старого
url():
from django.urls import re_path
urlpatterns = [
re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
]
re_path() — это явная замена
url() с тем же regex-синтаксисом, но из современного импорта.
2. Импорты: что изменилось
| Старое (Django 1.x) | Современное (Django 2.x+) |
from django.conf.urls import url |
from django.urls import path, re_path |
from django.conf.urls import include |
from django.urls import include |
from django.conf.urls import patterns |
Удалено — используйте обычный список urlpatterns |
3. Конвертеры путей vs regex
Встроенные конвертеры path() заменяют большинство regex-паттернов:
| Старый regex | Современный конвертер | Описание |
(?P<pk>\d+) |
<int:pk> |
Целые числа |
(?P<name>[^/]+) |
<str:name> |
Строки без / |
(?P<slug>[-\w]+) |
<slug:slug> |
Slug-строки |
(?P<pk>[0-9a-f-]{36}) |
<uuid:pk> |
UUID |
(?P<path>.+) |
<path:path> |
Строки со / |
4. settings.py — что изменилось в Django 4.x/5.x
| Настройка | Django 3.x и ранее | Django 4.x/5.x |
DEFAULT_AUTO_FIELD |
Не было — использовался AutoField |
По умолчанию BigAutoField (64-bit) |
| CSRF cookies |
Стандартные настройки |
Добавлен CSRF_COOKIE_SAMESITE |
Настройка
DEFAULT_AUTO_FIELD в Django 3.2+ рекомендуется явно указывать в settings.py, чтобы избежать предупреждений о миграциях:
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
5. Итоговая таблица: что из лекции устарело
| Что в лекции | Современный аналог | Версия |
from django.conf.urls import url |
from django.urls import path, re_path |
Django 2.0 |
| url() с regex для простых маршрутов |
path() со встроенными конвертерами |
Django 2.0 |
| patterns() для urlpatterns |
Обычный список urlpatterns = [...] |
Django 1.10 |