#django
#django
Вопрос:
Я новичок в Django, и у меня есть 2 конечные точки в REST API:
api.myapp.com/PUBLIC/
api.myapp.com/PRIVATE/
Как следует из названий, /PUBLIC
конечная точка открыта для всех. Однако я хочу /PRIVATE
, чтобы конечная точка принимала вызовы только от myapp.com
(моего интерфейса). Как я могу это сделать? Спасибо!
Ответ №1:
Не зная, как настроены ваши приложения и серверы, я думаю, вы можете решить эту проблему с помощью пакета django-cors-headers. Я просмотрел все прочитанное мной, и сигналы внизу выглядят как решение вашей проблемы. Эта часть здесь:
Общий вариант использования сигнала — разрешить всем источникам доступ к подмножеству URL-адресов, в то же время позволяя обычному набору источников получать доступ ко всем URL-адресам. Это невозможно, используя только обычную конфигурацию, но это может быть достигнуто с помощью обработчика сигналов.
Сначала установите CORS_ALLOWED_ORIGINS в список надежных источников, которым разрешен доступ к каждому URL-адресу, а затем добавьте обработчик в check_request_enabled, чтобы разрешить CORS независимо от источника для неограниченных URL-адресов. Например:
# myapp/handlers.py from corsheaders.signals import check_request_enabled def cors_allow_api_to_everyone(sender, request, **kwargs): return request.path.startswith('/PUBLIC/') check_request_enabled.connect(cors_allow_api_to_everyone)
Таким образом, в большинстве случаев django-cors-headers устанавливаются в качестве опции для всего проекта, но, похоже, здесь есть способ разрешить доступ к подмножеству вашего api ( /PUBLIC
в вашем случае) для всех, но остальное является частным.
Таким образом, ваша конфигурация будет
CORS_ALLOWED_ORIGINS = [
"https://myapp.com",
]
Это позволяет myapp.com чтобы достичь всего.
cors_allow_api_to_everyone
это функция, проверяющая значение истинности.
Если это true, запрос разрешен.
check_request_enabled.connect(cors_allow_api_to_everyone)
подключает вашу функцию проверки истинности к сигналу django-cors-headers.
Комментарии:
1. Я обновил свой ответ для вас обоих. Вам все равно придется прочитать документы по django-cors-headers Nick, но я выделил ту часть, которую считаю наиболее важной для вас. Если вы новичок в signals в django, это также может стоить прочитать, так что это не слишком волшебно.