request.session
- это объект SessionStore с уникальным ключом сеанса.
Сеансовый ключ создается, как только к атрибуту обращаются. Но сам объект сеанса сохраняется в базе данных только после обработки представления (в методе process_response промежуточного программного обеспечения сеанса) путем вызова метода save объекта SessionStore.
Это на самом деле не задокументировано, но, глядя на исходный код, я предполагаю, что вы должны создать новый объект сеанса, подобный этому:
if not request.session.exists(request.session.session_key):
request.session.create()
Вы также можете создать пользовательское промежуточное программное обеспечение сеанса, которое гарантирует, что ваш новый объект сеанса всегда доступен, прежде чем какое-либо из ваших представлений попытается получить к нему доступ:
from django.conf import settings
from django.contrib.sessions.middleware import SessionMiddleware
class CustomSessionMiddleware(SessionMiddleware):
def process_request(self, request):
engine = import_module(settings.SESSION_ENGINE)
session_key = request.COOKIES.get(settings.SESSION_COOKIE_NAME, None)
request.session = engine.SessionStore(session_key)
if not request.session.exists(request.session.session_key):
request.session.create()
(Конечно, вы должны ссылаться на свое новое промежуточное программное обеспечение сеанса через SESSION_ENGINE внутри вашего settings.py
)
Но учтите - этот подход будет генерировать новый объект сеанса для каждого запроса, если браузер пользователя не поддерживает файлы cookie ...