django + session var 不在视图之间传输
django + session var not transferring between views
一旦我在主页视图中提交表单,我们就会被重定向到我的下载视图,该视图对我的会话变量有错误的响应...为什么???我不确定如何解决这个问题,感觉我已经尝试了所有方法。
@login_required
def Home(request):
form = TimeForm()
search_times = []
if request.method == "POST":
# clear session data
# for key in request.session.keys():
# test.append(request.session[key])
start = request.POST['start_time']
end = request.POST['end_time']
start = time.mktime(datetime.datetime.strptime(start, "%Y-%m-%d %H:%M:%S").timetuple())
end = time.mktime(datetime.datetime.strptime(end, "%Y-%m-%d %H:%M:%S").timetuple())
start = re.split('.[0-9]+$', str(start))[0]
end = re.split('.[0-9]+$', str(end))[0]
search_times.append(int(start))
search_times.append(int(end))
request.session['search_times'] = search_times
request.session.save()
context = {
'form': form,
'search_times': search_times,
}
return render(request, "pcap_app/home.html", context)
def Download(request, path):
test = []
access_time = []
search_times = []
search_times = request.session.get('search_times', False)
# testing timestamp directory listing
files = sorted_ls(os.path.join(settings.MEDIA_ROOT, path))
for f in files:
time = os.stat(os.path.join(settings.MEDIA_ROOT, f)).st_mtime
access_time.append(int(re.split('.[0-9]+$', str(time))[0]))
context = {
'sort': files,
'times': access_time,
'search': search_times,
'test': test,
}
return render(request, "pcap_app/downloads.html", context)
home.html
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<link href="{{ STATIC_URL }}css/bootstrap.css" rel="stylesheet" type="text/css"/>
<script src="{{ STATIC_URL }}js/bootstrap.js"></script>
{{ form.media }}
</head>
<body>
<h1>pcap search</h1>
{% if user.is_authenticated %}
<form action="/download/" method="POST">
{% csrf_token %}
{{ form.as_p }}
<input id="submit" type="submit" value="Submit">
</form>
{{ search_times }}
{{ test }}
<a href="/logout/">Logout</a>
{% else %}
<a href="/login/?next={{ request.path }}">Login</a>
{% endif %}
</body>
尝试保存会话
request.session.save()
您错误地将 home.html
模板中的 action
属性设置为 /download/
。
提交表单时,POST
请求会提交到 /download/
视图,而不是 home
视图。因此,设置会话的代码永远不会执行。
您需要将 action
属性更改为 home
视图 url。执行此操作时,如果有 POST
个请求,将在会话中设置变量 search_times
。
<form action="/home/url/" method="POST">
在 home.html
中指定 action
属性后,您需要重定向到 home
视图中的 /download/
。然后在您的 download
视图发生重定向后,您将可以访问会话中的 search_times
变量。
@login_required
def Home(request):
form = TimeForm()
search_times = []
if request.method == "POST":
...
request.session['search_times'] = search_times # set the variable in the session
return HttpResponseRedirect('/download/') # redirect to download page
context = {
'form': form,
'search_times': search_times,
}
return render(request, "pcap_app/home.html", context)
一旦我在主页视图中提交表单,我们就会被重定向到我的下载视图,该视图对我的会话变量有错误的响应...为什么???我不确定如何解决这个问题,感觉我已经尝试了所有方法。
@login_required
def Home(request):
form = TimeForm()
search_times = []
if request.method == "POST":
# clear session data
# for key in request.session.keys():
# test.append(request.session[key])
start = request.POST['start_time']
end = request.POST['end_time']
start = time.mktime(datetime.datetime.strptime(start, "%Y-%m-%d %H:%M:%S").timetuple())
end = time.mktime(datetime.datetime.strptime(end, "%Y-%m-%d %H:%M:%S").timetuple())
start = re.split('.[0-9]+$', str(start))[0]
end = re.split('.[0-9]+$', str(end))[0]
search_times.append(int(start))
search_times.append(int(end))
request.session['search_times'] = search_times
request.session.save()
context = {
'form': form,
'search_times': search_times,
}
return render(request, "pcap_app/home.html", context)
def Download(request, path):
test = []
access_time = []
search_times = []
search_times = request.session.get('search_times', False)
# testing timestamp directory listing
files = sorted_ls(os.path.join(settings.MEDIA_ROOT, path))
for f in files:
time = os.stat(os.path.join(settings.MEDIA_ROOT, f)).st_mtime
access_time.append(int(re.split('.[0-9]+$', str(time))[0]))
context = {
'sort': files,
'times': access_time,
'search': search_times,
'test': test,
}
return render(request, "pcap_app/downloads.html", context)
home.html
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<link href="{{ STATIC_URL }}css/bootstrap.css" rel="stylesheet" type="text/css"/>
<script src="{{ STATIC_URL }}js/bootstrap.js"></script>
{{ form.media }}
</head>
<body>
<h1>pcap search</h1>
{% if user.is_authenticated %}
<form action="/download/" method="POST">
{% csrf_token %}
{{ form.as_p }}
<input id="submit" type="submit" value="Submit">
</form>
{{ search_times }}
{{ test }}
<a href="/logout/">Logout</a>
{% else %}
<a href="/login/?next={{ request.path }}">Login</a>
{% endif %}
</body>
尝试保存会话
request.session.save()
您错误地将 home.html
模板中的 action
属性设置为 /download/
。
提交表单时,POST
请求会提交到 /download/
视图,而不是 home
视图。因此,设置会话的代码永远不会执行。
您需要将 action
属性更改为 home
视图 url。执行此操作时,如果有 POST
个请求,将在会话中设置变量 search_times
。
<form action="/home/url/" method="POST">
在 home.html
中指定 action
属性后,您需要重定向到 home
视图中的 /download/
。然后在您的 download
视图发生重定向后,您将可以访问会话中的 search_times
变量。
@login_required
def Home(request):
form = TimeForm()
search_times = []
if request.method == "POST":
...
request.session['search_times'] = search_times # set the variable in the session
return HttpResponseRedirect('/download/') # redirect to download page
context = {
'form': form,
'search_times': search_times,
}
return render(request, "pcap_app/home.html", context)