Изменение таблицы django_session
для добавления явного user_id
может значительно облегчить жизнь. Предполагая, что вы делаете это (или что-то подобное), вот четыре подхода к тому, чтобы подбирать вещи по своему вкусу:
Вилка кода django.contrib.session
. Я знаю, я знаю, это ужасная вещь, чтобы предложить. Но это всего 500 строк, включая все бэкэнды и минус тесты. Это довольно просто взломать. Это лучший маршрут, только если вы собираетесь что-то серьезно изменить.
Если вы не хотите раскошелиться, попробуйте подключиться к сигналу Session.post_save
и заглянуть туда.
Или вы можете MonkeyPatch contrib.session.models.Session.save()
. Просто оберните существующий метод (или создайте новый), разбейте / синтезируйте любые значения, которые вам нужны, сохраните их в ваших новых полях, а затем super(Session, self).save()
.
Еще один способ сделать это - добавить 2 (да, два) класса промежуточного программного обеспечения - один до и один после SessionMiddleware
в ваш файл settings.py . Это из-за способа обработки промежуточного программного обеспечения. Тот, который указан после SessionMiddleware
, получит по входящему запросу запрос с уже подключенным сеансом. Приведенный выше может выполнить любую обработку ответа и / или изменить / повторно сохранить сеанс.
Мы использовали вариацию этого последнего метода для создания псевдосеансов для пауков поисковых систем, чтобы предоставить им специальный доступ к материалам, которые обычно доступны только для членов. Мы также обнаруживаем входящие ссылки, где поле REFERER
, из соответствующей поисковой системы, и мы даем пользователю полный доступ к этой статье.
Обновление:
Мой ответ сейчас довольно древний, хотя он все еще в основном правильный. См. Гораздо более свежий ответ @ Gavin_Ballard (29.09.2014) ниже для еще одного подхода к этой проблеме.