【发布时间】:2017-02-20 00:49:45
【问题描述】:
我正在使用 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 对象。也许是问题所在?会议不可能这么大?
如果最好使用其他东西,你能告诉我吗?
【问题讨论】:
-
您的
SESSION_ENGINE设置是什么?INSTALLED_APPS中有django.contrib.sessions吗? -
我使用您要求的参数编辑了问题。
-
如果您将会话存储在 cookie 中,那么大 JSON 对象可能是问题所在。我认为 cookie 最多只能有 4 KB 长。
-
是的,那肯定是问题所在。
标签: django session request django-views