Django остальные фреймворки Reactjs сессии не работают - PullRequest
0 голосов
/ 01 июня 2018

Итак, я настроил Django rest framework в качестве бэкэнд-API для сайта электронной коммерции.Веб-сайт отображается через интерфейс React, который не обслуживается бэкэндом django.

В настоящее время я запускаю и бэкэнд Django, и интерфейс React со своих локальных серверов разработки (http://127.0.0.1:8000 и http://127.0.0.1:3000 соответственно).В будущем они будут находиться в отдельных доменах, вероятно.

Когда я устанавливаю сеанс в представлении и читаю содержимое в другом, это работает, если я просто набираю URL для создания и чтения непосредственно в мойбраузер (только для тестирования).Но когда я получаю доступ к бэкэнду через мой веб-интерфейс, сеансы больше не могут быть доступны или не сохраняются.Что произойдет, это то, что я получаю KeyError при попытке получить доступ к данным, которые я установил в предыдущем представлении.

Я думаю, это связано с тем, что я прочитал некоторое время назад, но мне труднонайти правильную информацию о том, как с этим работать.Связано ли это с файлом cookie, когда идентификатор сеанса недоступен для внешнего интерфейса, а доступен только для самого бэкэнда?

Основной вопрос: Я хотел бы знать, как я могу работатьс сеансами, используя вышеуказанную настройку, для хранения корзины покупок.

Мой бэкэнд-код, на случай, если кто-то спросит:

from django.http import HttpResponse


def cart_add(request, product_id, update, quantity):
    request.session['one'] = 'created through "cart_add" view'
    return HttpResponse("Created a session - cart_add")


def create(request):
    request.session['one'] = 'created through "read" view'
    return HttpResponse("Created a session - create")


def read(request):
    print(request.session['one'])

Я удалил некоторые ненужныекод.

  • Представление cart_add вызывается из внешнего интерфейса React с использованием вызова ajax (axios).
  • Представление создания и чтения, которое я вызывал, вводил их URL-адреса непосредственно в браузер.(Все это делается для целей тестирования, просто убедитесь, что сеансы работают, прежде чем я начну писать реальный код.)

Ответы [ 2 ]

0 голосов
/ 07 августа 2019

У меня была такая же проблема, добавление withCredentials в axios call не решило мою проблему в django 2.2.3 и axios 0.19.0.

Если ответ здесь не работает для вас, тогдапосмотрите на ответ ниже:)

Реагировать Django REST Framework сеанс не сохраняется / работает

0 голосов
/ 01 июня 2018

Я нашел решение в другом вопросе stackoverflow. Это ссылка на него.

Добавив следующее в мой запрос axios, код успешно работает:

axios.get('some api url', {withCredentials: true});

Так что, похоже, мое предположение о cookieнеправильный идентификатор сеанса для внешнего интерфейса.

Я также обнаружил, что могу увидеть файл cookie, открыв веб-страницу в Chrome, а затем открыв инструменты разработчика> перейдя на вкладку «приложение»>нажмите на куки.

Здесь перечислены все доступные куки, а также показан сессионный куки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...