2016-10-11 2 views
0

Я работаю с Django, и мне нужно отправить данные через request.session. У меня есть два простых просмотров:Django request.session не передается на следующее представление

  1. Один, который вычисляет и отображает результаты пользователю
  2. One, который сохраняет информацию после того, как пользователь нажал кнопку «Подтвердить»

Вот они :

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

Какая у вас настройка 'SESSION_ENGINE'? У вас есть 'django.contrib.sessions' в' INSTALLED_APPS'? –

+0

Я отредактировал вопрос с параметрами, которые вы просили. – Licia

+1

Большие объекты JSON могут быть проблемой, если вы храните сеансы в файлах cookie. Я думаю, что файлы cookie могут иметь длину до 4 КБ. –

ответ

1

Вы должны попытаться использовать django.contrib.sessions.backends.db бэкенд:

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

Это будет хранить все данные сессии в базе данных на сервере, в то время как только посылая небольшой идентификатор клиента так, чтобы они не имеют все данные.

+0

Спасибо, что это решило проблему, потому что я действительно понял, что объекты JSON, которые я хотел отправить, были слишком большими. Я думал об использовании базы данных, но не думал об этом таким образом. Благодарю. – Licia

Смежные вопросы