#django #reactjs #django-rest-framework #windows-server-2019
#django #reactjs #django-rest-framework #windows-server-2019
Вопрос:
Я запускаю интерфейсное приложение ReactJS и серверную часть / API Django REST на одном веб-хостинге. Приложение отлично работает на localhost, однако, когда вы запускаете его откуда-то еще, кажется, что оно не может подключиться к API.
Консоль браузера клиента:
Django REST, запущенный на сервере:
Должен ли я подключаться к нему, используя внешний IP сервера вместо localhost? Localhost должен работать правильно, поскольку и интерфейс, и Django API размещены на одном сервере?
Комментарии:
1. 127.0.0.1 должен работать, localhost, только если он отображен в hosts, а внешний IP-адрес не будет
2. @iklinac Есть какие-нибудь подсказки, почему тогда я получаю сообщение об ошибке «отказано в подключении»?
Ответ №1:
прежде чем извлекать django rest_api, убедитесь, что вы настроили его django-cors-headers
в своем бэкэнде settings.py
. для получения дополнительной информации взгляните на эту ссылку.
pip install django-cors-headers
settings.py :
INSTALLED_APPS = [
...
'corsheaders',
...
]
MIDDLEWARE = [ # Or MIDDLEWARE_CLASSES on Django < 1.10
...
'corsheaders.middleware.CorsMiddleware',
'corsheaders.middleware.CorsPostCsrfMiddleware',
...
]
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_METHODS = [
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
]
Комментарии:
1. вы настроили свой порт по умолчанию
8000
в вашемsecurtiy-group
на вашем сервере?2. Либо запустите свой проект django как
python manage.py runserver 0.0.0.0:8000
3. Я попытался запустить его как 0.0.0.0: 8000, он подключается, но затем выдает ошибку cors о том, что вы не можете получить доступ к HTTP (django) с HTTPS (веб-интерфейса)
4. Добавьте все вышеперечисленные вещи в свой
settings.py
, на которые я ответил в этом посте. последнее — либо разрешитьCORS_ORIGIN_ALLOW_ALL = True
, либоCORS_ALLOWED_ORIGINS = [ "http://localhost:8000", "http://localhost:3000" ]
5. Я только что добавил все, что вы упомянули. Когда я обращаюсь к API по домену, он выдает мне ошибку SSSL_PROTOCOL_ERROR, когда я обращаюсь к нему по localhost: 8000, он выдает мне ОШИБКУ_CONNECTION_REFUSED, а к 0.0.0.0: 8000 он выдает мне ОШИБКУ_ADDRESS_INVALID. Я в замешательстве, давайте сначала разберемся, как я должен получить доступ к API? Домен, localhost или 0.0.0.0? Django размещен на 0.0.0.0:8000
Ответ №2:
На случай, если кто-то ищет ответ, я узнал несколько вещей с момента публикации:
- Доступ к API Django должен осуществляться по IP, а не по localhost.
- Поскольку мой веб-сайт находится на HTTPS, доступ к Django также должен осуществляться по HTTPS, иначе он не будет работать.
- Поскольку Django runserver не поддерживает HTTPS, вам необходимо разместить его на веб-сервере (вы должны делать это в любом случае на производстве), я использовал Apache для этого.
Спасибо xxnora за советы и направление меня в правильном направлении.