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)