Django request.session没有传递给下一个视图

时间:2016-10-11 13:04:33

标签: django session request django-views

我正在使用Django,我需要通过request.session发送数据。 我有两个简单的观点:

  1. 计算并向用户显示结果的人
  2. 一旦用户点击"验证"按钮
  3. 他们是:

    def import_trunk_con(request) :
        request.session.flush()
    
        trunks = []
        connections =[]
        if request.method == 'POST':
            form = ExcelFileForm(request.POST, request.FILES)
            print(form.errors)
    
            if form.is_valid():
                [trunks, connections] = handle_trunk_file(request.FILES['excel_import_file'])
        else:
            form = ExcelFileForm()
        context = {
            'form': form,
            'trunk_list' : trunks,
            'connection_list' : connections
        }
        request.session['import_trunks'] = trunks
        request.session['import_connections'] = connections
    
        print(request.session['import_trunks']) #Prints the right result
        print(request.session['import_connections']) #Prints the right result
        template = loader.get_template('confWeb/import/import_trunk_con.html')
        return HttpResponse(template.render(context, request))
    

    并且

    def import_recap_trunks(request):
    
        print('import_trunks' in request.session) #Result is False
        print('import_connections' in request.session) #Result is False
        if 'import_trunks' in request.session and 'import_connections' in request.session :
            print(request.session['import_trunks'])
            #Do some stuff with what's inside the session
    
            del request.session['import_trunks']
            del request.session['import_connections']
    

    以下是我的设置:

    INSTALLED_APPS = [
        'confWeb.apps.ConfwebConfig',
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
    ]
    
    SESSION_ENGINE = "django.contrib.sessions.backends.signed_cookies"
    

    问题是它在尝试访问第二个视图之前已正确存储在会话中,但是当我们进入第二个视图时,它就好像会话已被刷新一样。

    我也意识到也许我不应该使用request.session这样做,因为我传递了相当大的JSON对象。也许这就是问题所在?会议不能这么大? 如果最好使用别的东西,你能告诉我吗?

1 个答案:

答案 0 :(得分:2)

您应该尝试使用django.contrib.sessions.backends.db后端:

# settings.py
SESSION_ENGINE = "django.contrib.sessions.backends.db"

这会将所有会话数据存储在服务器上的数据库中,同时只向客户端发送一个小ID,以便它们不具备所有数据。