Django休息框架Reactjs会话无法正常工作

时间:2018-06-01 08:01:22

标签: django reactjs session django-rest-framework session-cookies

所以我设置了Django rest框架作为电子商务网站的后端API。该网站通过React前端显示,django后端不提供此服务。

我目前正在运行本地开发服务器(分别为http://127.0.0.1:8000http://127.0.0.1:3000)的Django后端和React前端。在未来,他们可能会在不同的领域。

当我在视图中设置会话并读取另一个会话中的内容时,如果我只是输入用于创建和直接读入浏览器的URL(仅用于测试目的),这将起作用。但是当我通过我的前端访问后端时,会话不再被访问,或者似乎无法存储。当我尝试访问我在上一个视图中设置的数据时,会发生KeyError。

我想这与我前段时间读到的内容有关,但我发现很难找到有关如何使用它的正确信息。这是否与会话ID不可用于前端的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'])

我删除了一些不必要的代码。

  • 使用ajax调用(axios)从React前端调用cart_add视图。
  • 我通过直接在浏览器中输入网址来调用创建和读取视图。 (这些都是为了测试目的而完成的,只是在开始编写实际代码之前确保会话正常工作。)

2 个答案:

答案 0 :(得分:2)

我在另一个stackoverflow问题中找到了解决方案。 This is the link to it.

通过在axios请求中添加以下内容,代码可以成功运行:

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

所以看来我关于会话ID不可用于前端的cookie的假设是不正确的。

我还发现,我可以通过在Chrome中打开网页,然后打开开发人员工具>来查看Cookie。转到“应用”标签>点击cookies。

此处列出了所有可用的cookie,并显示了一个sessionid cookie。

答案 1 :(得分:0)

我遇到了同样的问题,在axios调用中添加withCredentials并不能解决django 2.2.3和axios 0.19.0中的问题。

如果这里的答案对您不起作用,请查看以下答案:)

React Django REST framework session is not persisting/working