【问题标题】:Django request.session is not passed to the next viewDjango request.session 没有传递到下一个视图
【发布时间】:2017-02-20 00:49:45
【问题描述】:

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

  1. 计算结果并向用户显示结果
  2. 在用户点击“验证”按钮后保存信息

他们在这里:

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


【解决方案1】:

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

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

这会将所有会话数据存储在您服务器上的数据库中,同时只向客户端发送一个小 ID,这样他们就不会拥有所有数据。

【讨论】:

  • 谢谢这解决了问题,因为我确实意识到我想要发送的 JSON 对象太大了。我想过使用数据库,但没有这样想。谢谢。
猜你喜欢
  • 2018-08-08
  • 1970-01-01
  • 2017-01-20
  • 1970-01-01
  • 2012-02-19
  • 2020-02-10
  • 1970-01-01
  • 2017-03-08
  • 1970-01-01
相关资源
最近更新 更多