【问题标题】:Django response setting a json as a cookieDjango响应将json设置为cookie
【发布时间】:2019-12-18 01:49:25
【问题描述】:

我想将来自 django 的客户端 cookie 的值设置为 javascript 字典对象。我知道你可以在 django 中设置这样的字符串的 cookie 值:


response = HttpResponseRedirect( reverse('app:home') )
response.set_cookie( 'cookiekey', 'value' )
return response

然后我可以像这样在客户端读取 cookie:

Cookies.get( 'cookiekey' )

使用 Cookie 库 (https://github.com/js-cookie/js-cookie)

我无法将 cookie 设置为字典/json 对象:

我试过这个:


response.set_cookie( 'cookiekey', {'value' : 'value'} )

import json
response.set_cookie( 'cookiekey', json.dumps( {'value' : 'value'} ) )

然后尝试使用以下命令在客户端读取 cookie:

Cookies.getJSON( 'cookiekey' )

但这似乎并没有给我一个 javascript 字典对象(Cookies.get 也没有),而是一个字符串:

var message = Cookies.getJSON( 'cookiekey' );
alert( typeof message );

【问题讨论】:

  • 你为什么要使用cookies?

标签: javascript python django cookies


【解决方案1】:

在你的 Python 脚本中使用它来设置 cookie:

response.set_cookie("json", json.dumps({"foo":"bar"}))

并在您的 JavaScript 中使用它来获取 cookie,使用 JSON.parse 而不是 Cookies.get

JSON.parse(Cookies.get( 'json' ))

这对我有用:)

编辑:

如果有问题,请使用 JSON.parse(Cookies.get( 'json' ).split('\\').join(''); 删除所有反斜杠

【讨论】:

  • 这对我不起作用,因为我收到错误消息: Uncaught SyntaxError: Unexpected token \ in JSON at position 1 The pre JSON'd cookie string is: {\"message\": \"bar\ "},即使我在上面做.replace('\\','') ,它也只会替换第一个反斜杠
  • 抱歉,请尝试将 json.dumps({"foo":"bar"}) 替换为 json.dumps({"foo":"bar"}).replace(" ","")... 可以吗?可能是 JS JSON 库过于繁琐...
猜你喜欢
  • 1970-01-01
  • 2022-07-18
  • 2019-08-19
  • 2014-01-12
  • 2014-05-04
  • 1970-01-01
  • 2012-03-25
  • 2016-05-06
  • 2017-06-12
相关资源
最近更新 更多