Как обогатить объект запроса Django расширенными функциями?

В моем проекте Django есть ситуация, когда различные представления взаимодействуют через данные сессии запроса следующим образом:

def view_one(request):
    ...
    request.session['my_session_key'] = data
    ...

def view_two(request):
    ...
    data = request.session['my_session_key']
    ...

Однако при этом возникают следующие проблемы:

  • Строка ключей my_session_key не является константой, поэтому будет трудно масштабировать ее на другие части кода, если я начну писать в нее и/или читать из нее в других частях моего кода.
  • По мере роста этой системы будет все труднее определить, какие из доступных ключей используются и записываются в сессии.

В Kotlin (с которым я более знаком) одним из способов решения этой проблемы было бы использование функции расширения, например, так:

var Request.my_session_key: Int
  get() = this.session['my_session_key']
  set(value) { this.session['my_session_key'] = value }

Таким образом, теперь я могу написать свои представления следующим образом:

def view_one(request):
    ...
    request.my_session_key = data
    ...

def view_two(request):
    ...
    data = request.my_session_key
    ...

Есть ли способ сделать что-то подобное на Python или в Django? Или, в качестве альтернативы, делая шаг назад, что было бы лучшим способом организовать данные, хранящиеся в сессии Django, в нескольких представлениях?

Вернуться на верх