ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Включение CORS в Django REST Framework: пошаговое руководство

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

В первую очередь, в проект необходимо добавить django-cors-headers. Сделайте следующие изменения в настройках:

Python
Скопировать код
# settings.py

INSTALLED_APPS = [..., 'corsheaders', ...]
MIDDLEWARE = [..., 'corsheaders.middleware.CorsMiddleware', ...]
CORS_ALLOWED_ORIGINS = ["https://example.com", "http://localhost:3000"]

Обратите внимание: обязательно нужно установить CORS_ALLOWED_ORIGINS, перечислив те домены, доступ с которых к вашему API для осуществления кросс-доменных запросов должен быть разрешён. Теперь ваш API способен работать с CORS.

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Установка

Сначала установите django-cors-headers, используя следующую команду:

shell
Скопировать код
pip install django-cors-headers

Настройка конфигурации Django

Теперь произведите настройку Django. Расширьте список INSTALLED_APPS, включив в него 'corsheaders', а также добавьте 'corsheaders.middleware.CorsMiddleware' в MIDDLEWARE перед CommonMiddleware:

Python
Скопировать код
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 включен, допустимые домены проходят без проблем.

Markdown
Скопировать код
Без CORS:
🏰 [🛑] 🌐 – Извините, вход только по списку.

С CORS:
🏰 [✅] 🌐 – Добро пожаловать, гость из списка разрешенных!

Активация CORS в settings.py может выглядеть так:

Python
Скопировать код
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 без острой необходимости для сохранения производительности и обеспечения надёжности сервера.

Полезные материалы

  1. Официальная документация по обработке CORS в Django REST framework: о AJAX, CSRF и CORS.
  2. Репозиторий и документация для пакета Django CORS Headers на GitHub.
  3. Обзор по CORS от Mozilla.
  4. Инструмент для проверки конфигурации сервера CORS.
  5. Статья о осознании и устранении проблем с CORS.