Django CORS Headers

django-cors-headers решает проблемы с CORS при создании API для фронтенд приложений.

Установка

1# Установка пакета
2pip install django-cors-headers
1# Или через Poetry
2poetry add django-cors-headers

Настройка

 1# settings.py
 2INSTALLED_APPS = [
 3    'corsheaders',
 4]
 5
 6MIDDLEWARE = [
 7    'corsheaders.middleware.CorsMiddleware',
 8    'django.middleware.common.CommonMiddleware',
 9]
10
11# Разрешить все источники (только для разработки!)
12CORS_ALLOW_ALL_ORIGINS = True
13
14# Для production указать конкретные домены
15CORS_ALLOWED_ORIGINS = [
16    "https://example.com",
17    "https://sub.example.com",
18    "http://localhost:3000",
19]

Дополнительные настройки

 1# Разрешенные заголовки
 2CORS_ALLOW_HEADERS = [
 3    'authorization',
 4    'content-type',
 5    'x-csrftoken',
 6]
 7
 8# Разрешенные методы
 9CORS_ALLOW_METHODS = [
10    'DELETE',
11    'GET',
12    'OPTIONS',
13    'PATCH',
14    'POST',
15    'PUT',
16]
17
18# Разрешенные credentials
19CORS_ALLOW_CREDENTIALS = True
20
21# Время жизни preflight запросов
22CORS_PREFLIGHT_MAX_AGE = 86400

Настройка для production

 1# settings.py
 2CORS_ALLOWED_ORIGINS = [
 3    "https://yourdomain.com",
 4    "https://api.yourdomain.com",
 5]
 6
 7CORS_ALLOWED_ORIGIN_REGEXES = [
 8    r"^https://\w+\.yourdomain\.com$",
 9]
10
11# Разрешить только определенные заголовки
12CORS_EXPOSE_HEADERS = ['content-type', 'x-custom-header']

FAQ

Q: Почему CORS не работает?
A: Убедись, что CorsMiddleware стоит перед CommonMiddleware.

Q: Как настроить для разных окружений?
A: Используй переменные окружения для разных настроек.