Как разрешить CORS в django только для определенного адреса?

Нашел примеры как разрешить полностью cors с помощью django-cors-headers

CORS_ORIGIN_ALLOW_ALL = True 

Но я хочу разрешить полный доступ только к одному api, а в остальном к сайту запретить.

Подскажите как это сделать?


Ответы (2 шт):

Автор решения: Alex78191

Список источников, авторизованных для выполнения межсайтовых HTTP-запросов задается с помощью параметра CORS_ALLOWED_ORIGINS

CORS_ALLOWED_ORIGINS = [
    "https://example.com",
    "https://sub.example.com",
    "http://localhost:8080",
    "http://127.0.0.1:9000",
]

https://github.com/adamchainz/django-cors-headers#configuration

→ Ссылка
Автор решения: Tihon

CORS - это инструмент ограничения доступа к ресурсам на домене. В соответствии с этим, вам следует разделить приложение на Django на n-субдоменов/-серверов. Пример:

  • example.com
  • api.example.com
  • private.example.com

Тогда вы сможете разрешить wildcard (*) доступ для домена api.example.com и ограничить использование private.example.com любым удобным вам способом. Например, с помощью django-cors-headers (как указано в одном из ответов), с помощью wsgi-/asgi- middleware, или настроек реверс-прокси/балансировщика (пример для nginx).

Вы не сможете покрыть только часть эндпоинтов на едином домене, т.к. ограничения применимы только к домену.

→ Ссылка