我正在使用Django,我需要通过request.session
发送数据。
我有两个简单的观点:
他们是:
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对象。也许这就是问题所在?会议不能这么大?
如果最好使用别的东西,你能告诉我吗?
答案 0 :(得分:2)
您应该尝试使用django.contrib.sessions.backends.db
后端:
# settings.py
SESSION_ENGINE = "django.contrib.sessions.backends.db"
这会将所有会话数据存储在服务器上的数据库中,同时只向客户端发送一个小ID,以便它们不具备所有数据。