Каждый пользователь в приложении Django связан с отделом, и практически каждый запрос связан с обработкой, связанной с отделом. Поэтому я хотел бы сделать объект отдела доступным во всем приложении.Начало работы с промежуточным программным обеспечением Django, сеансами и кешированием
Какой из них, если таковые имеются, является наиболее подходящим подходом принять:
- Пользовательские промежуточного слоя, который просто получает связанную отдел из БД и присоединяет его к
request
объекта, скажем, какrequest.department
, вроде например,AuthenticationMiddleware
Django делает пользователя в настоящий момент доступным по адресуrequest.user
. (См., Например, here10) - Размещение отдела в сеансе при входе пользователя в систему и последующем извлечении его во взглядах с использованием интерфейса
request.session
Django.
У меня еще не было возможности познакомиться с функциями кэширования Django, но я хотел бы, в конечном итоге, кэшировать отдел для каждого пользователя, чтобы избежать дополнительного попадания БД в каждый запрос. Я вижу это Django's sessions provide built-in caching support. Я также предполагаю, что кэширование может быть реализовано с помощью первого подхода.
Есть ли преимущество в использовании сеансов (# 2 выше) по сравнению с обычным промежуточным программным обеспечением (№ 1 выше) для такого рода вещей? Подход промежуточного программного обеспечения кажется более понятным с точки зрения внутреннего API, но я предполагаю, что это именно то, для чего предназначены сеансы, - возможно, это подходящая возможность начать их использовать?
Спасибо за любые рекомендации!
Спасибо за предложения и отзывы, Dmytriy ! Действительно полезно. Является ли это примером использования, когда использование хранилища на основе файлов cookie для данных сеанса может работать хорошо? Под этим я подразумеваю хранение самого отдела в cookie. Если я правильно понимаю, это сделает ненужным кэширование данных сеанса - данные будут отправляться клиентом (и доступны для сервера) по каждому запросу. – tino
@tino Да, если вы достаточно просты, и вы не хотите связываться с кешированием. Имейте в виду, что использование сеанса на основе файлов cookie имеет несколько существенных ограничений. Например, существует ограничение 4 Кбит для размера файла cookie для домена, более подробное сравнение можно найти здесь (http://stackoverflow.com/a/18240232/1255305).В любом случае, если вы будете использовать хранилище на основе файлов cookie, вы должны позаботиться о случаях использования, когда пользователь очистит файлы cookie, и они не находятся в запросе, и убедитесь, что вы не храните информацию о приватном доступе в файлах cookie, поскольку они могут быть взломаны , –
Получил. Еще раз спасибо. И я тоже оценил пример кэширования. – tino