【发布时间】:2019-11-23 09:29:32
【问题描述】:
我对 Django 会话有疑问,我不知道如何解决。基本上我将一些数据存储在一个视图函数中的session 字典中,并使用第一个视图中的值在第二个函数中计算一些东西。现在,如果有人打开两个选项卡,在一个选项卡中填写数据并提交,填写第二个选项卡并提交,则两个选项卡的会话字典将相同。我希望我用正确的方式表达自己。
简单解释:
def a(request):
request.session["q"] = request.POST.get('q')
def b(request):
while True:
print(request.session["q"])
所以不要假设函数a 正在渲染一个索引页面,并从那里获取一个值。在此index 页面功能中按下按钮b 被调用。现在,如果我打开两个选项卡,在索引页面中输入1 并提交,我会在终端中看到很多 1。现在我打开另一个标签,输入2,提交,打印会改变。
我想做的是在浏览器的不同选项卡上保持从我的服务器到用户的单独会话(进出的单独信息)。
如果我的措辞有误,我很抱歉,这是我第一次尝试使用 Web 服务器。
编辑:
正如我在 cmets 中提到的,答案目前不起作用,我认为这只是一个语法错误,但我不知道我哪里出错了。
我的模板:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
{% load staticfiles %}
<HTML>
<HEAD>
<LINK rel="stylesheet" type="text/css" href="{% static 'style7.css' %}"/>
<link rel="shortcut icon" type="image/png" href="{% static 'favicon.ico' %}"/>
<script src="http://cdn.bokeh.org/bokeh/release/bokeh-0.12.13.min.js"></script>
<link rel="stylesheet" href="http://cdn.bokeh.org/bokeh/release/bokeh-0.12.13.min.css">
<script type="application/javascript">function makeid() {
var text = "";
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for (var i = 0; i < 5; i++)
text += possible.charAt(Math.floor(Math.random() * possible.length));
return text;
}
document.getElementById("session").value = makeid();</script>
</HEAD>
<BODY>
....
....
<form action="{% url 'raw' %}" method="post" style="float: left;">{% csrf_token %}<input type="hidden" name="session" id="session"><input type="submit" value="Download text"/></form>
....
我的视图功能:
def plot(request):
print(request.POST.get("session"))
....
但是在终端看不到任何打印,因此我认为该变量是一个空字符串。
【问题讨论】:
-
@mohammedqudah 嗨,谢谢我之前找到了这个线程,并且也试图调查这个,但是我不明白它对我有什么帮助。据我了解,这是一个 JS 命令(我可能在这里大错特错),我不知道我应该在哪个模板中使用它,我应该在 Django 等中做些什么
-
@mohammedqudah 我也试过
request.sessionStorage["asd"] = 2,但它给出了错误,因为 sessionStorage 不存在。 -
这实际上可以使用 ajax 和 js 以及 django 视图来完成,但它会使您的代码变得复杂,您不必这样做。但我可以告诉你明天怎么做,因为我现在要睡觉了:D,再见:)
-
@mohammedqudah 非常感谢,我真的坚持这一点。