Вызовы API ReactJS для Django REST — использовать IP или localhost?

#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 за советы и направление меня в правильном направлении.