我有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
,提交,打印将会改变。
我想做的是在浏览器的不同标签上,从我的服务器到用户保持单独的会话(单独的信息进出)。
如果我说自己错了,我很抱歉,这是我第一次尝试使用网络服务器。
编辑:
正如我在评论中提到的,答案目前无效,我认为这只是一个语法错误,但我不知道我哪里出错了。
我的模板:
<!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.pydata.org/bokeh/release/bokeh-0.12.13.min.js"></script>
<link rel="stylesheet" href="http://cdn.pydata.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"))
....
然而在终端中看不到任何打印,因此我认为该变量是一个空字符串。
答案 0 :(得分:2)
我不知道你正在制作什么应用程序,但我可以说我想将用户名保存为会话。
<强> 1。我们需要创建一个脚本来创建随机代码并将其分配给隐藏的输入
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;
}
window.onload = function() {
document.getElementById("session").value = makeid();
}
<强> 2。以您从用户获取数据的形式添加新的隐藏输入
<form>
...
<input type="hidden" name="session" id="session">
</form>
第3。现在,当用户将表单提交给视图时,我们需要在视图中执行此操作
def someview(request):
session_id = request.GET.get('session')
username = request.GET.get('username') # or any data...
request.session['username_%s' % session_id] = username
# now lets say you want to redirect the user to the next page...
# you have to send the 'session_id' to it and always send to
# the next view then in that view retrieve his name like this
# ``name = request.session['username_%s' % session_id] ``
# the session_id from the old view
所以网址应该是这样的:
/first-step/?session=somecode
。
/second-step/?session=somecode
如果你有更多的字段,你必须在会话中保存它们并像我一样检索它们,希望它能帮助你,我知道它的复杂性! 再见:)