Включение CORS в Django REST Framework: пошаговое руководство
Быстрый ответ
В первую очередь, в проект необходимо добавить django-cors-headers
. Сделайте следующие изменения в настройках:
# settings.py
INSTALLED_APPS = [..., 'corsheaders', ...]
MIDDLEWARE = [..., 'corsheaders.middleware.CorsMiddleware', ...]
CORS_ALLOWED_ORIGINS = ["https://example.com", "http://localhost:3000"]
Обратите внимание: обязательно нужно установить CORS_ALLOWED_ORIGINS
, перечислив те домены, доступ с которых к вашему API для осуществления кросс-доменных запросов должен быть разрешён. Теперь ваш API способен работать с CORS.
Установка
Сначала установите django-cors-headers
, используя следующую команду:
pip install django-cors-headers
Настройка конфигурации Django
Теперь произведите настройку Django. Расширьте список INSTALLED_APPS
, включив в него 'corsheaders'
, а также добавьте 'corsheaders.middleware.CorsMiddleware'
в MIDDLEWARE
перед CommonMiddleware
:
INSTALLED_APPS = [
# ... ваши замечательные приложения,
'rest_framework',
'corsheaders',
]
MIDDLEWARE = [
# ... другие необходимые компоненты для оптимизации вашего приложения,
'corsheaders.middleware.CorsMiddleware',
# ... дополняем список MIDDLEWARE...
]
Настройка параметров CORS
Пришло время определить параметры CORS, воспользовавшись следующими настройками:
CORS_ALLOWED_ORIGINS
: Конкретные источники, доступ с которых для кросс-доменных запросов разрешён.CORS_ALLOW_ALL_ORIGINS
: Разрешает запросы из всех источников. Будьте аккуратны с этой настройкой.CORS_ALLOW_CREDENTIALS
: Если установили значениеTrue
, то разрешает использование cookies и заголовков для управления учётными данными.CORS_ALLOWED_ORIGIN_REGEXES
: Разрешает запросы с источников, соответствующих указанным регулярным выражениям.
Выбор настроек должен осуществляться обдуманно и обеспечивать баланс между удобством и безопасностью.
Распространённые схемы настроек и лучшие практики
- Ограничьте допустимые источники запросов при помощи
CORS_ALLOWED_ORIGINS
. Избегайте использованияCORS_ALLOW_ALL_ORIGINS
на продуктивных серверах. - Если необходима поддержка cookies или аутентификация через сессии, установите
CORS_ALLOW_CREDENTIALS
в значениеTrue
. - Для сложных настроек CORS обращайтесь к официальной документации.
- Если написали собственное промежуточное ПО для CORS, разместите его в
myapp/middleware/corsMiddleware.py
и аккуратно настройте необходимые заголовки.
Визуализация
CORS подобен бармену, который определяет, кто сможет попасть на вашу Django-вечеринку. Если CORS включен, допустимые домены проходят без проблем.
Без CORS:
🏰 [🛑] 🌐 – Извините, вход только по списку.
С CORS:
🏰 [✅] 🌐 – Добро пожаловать, гость из списка разрешенных!
Активация CORS в settings.py
может выглядеть так:
INSTALLED_APPS += ['corsheaders']
MIDDLEWARE += ['corsheaders.middleware.CorsMiddleware']
CORS_ALLOW_ALL_ORIGINS = True # Открытый доступ или используйте CORS_ALLOWED_ORIGINS для ограничения списка.
Добро пожаловать на Django-вечеринку!
Раздел по устранению неисправностей
Если вы столкнулись с проблемами в ходе работы с django-cors-headers
, проверьте следующее:
CorsMiddleware
должен располагаться вышеCommonMiddleware
в списке MIDDLEWARE.- Используйте корректные регулярные выражения Python для
CORS_ALLOWED_ORIGIN_REGEXES
, учтите чувствительность к регистру. - Избегайте использования
CORS_ALLOW_ALL_ORIGINS
без острой необходимости для сохранения производительности и обеспечения надёжности сервера.
Полезные материалы
- Официальная документация по обработке CORS в Django REST framework: о AJAX, CSRF и CORS.
- Репозиторий и документация для пакета Django CORS Headers на GitHub.
- Обзор по CORS от Mozilla.
- Инструмент для проверки конфигурации сервера CORS.
- Статья о осознании и устранении проблем с CORS.