Как обогатить объект запроса 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, в нескольких представлениях?