Изменить данные сеанса разных пользователей Django -- django поле с участием session поле с участием django-sessions пол Связанный проблема

Modify session data of different Django user


3
vote

проблема

русский

Это может быть невозможно, но когда случаются определенные условия, я хотел бы изменить данные сеанса определенных вошедших в систему пользователей (поместите, что некоторая дополнительная логика должна запускаться в следующий раз, когда они загружают страницу).

Есть ли способ получить доступ к сеансу пользователя по их идентификатору?

Английский оригинал

This may not be possible, but when certain conditions happen, I'd like to modify the session data of certain logged in users (flagging that some extra logic needs to run the next time they load a page).

Is there a way to access the session of a user by their ID?

</div
        

Список ответов

9
 
vote
vote
Лучший ответ
 

tldr; запрос <код> Session Модель, затем модифицируйте соответствующие сеансы через <код> SessionStore .

Ваш вопрос ввода в два раза, как получить сеанс пользователя и как изменять данные произвольных сеансов (возможно, снаружи View).

Получить все войти в систему пользовательских сеансов

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

 <код> from datetime import datetime  >>> sessions = Session.objects.exclude(expire_date__lte=datetime.now()) # [<Session: Session object>, <Session: Session object>]  >>> logged_in = [s.session_key for s in sessions if s.get_decoded().get('_auth_user_id')] # [u'qu1ir36jjvgbq2koqfa37b9hw1kb3ssu']   

Изменение сеансов вне просмотра

Хотя сценарий не явно не указан, Документы упоминают Как получить доступ к сеансам, без <Код> request контекста. По сути, SessionStore должен использоваться для изменения сеанса (который, в свою очередь, хранит новые данные в <Код> Session )

 <код> from django.contrib.sessions.backends.db import SessionStore  # look up our sessions in session store for session_key in logged_in:     s = SessionStore(session_key=session_key)     s['test'] = True     s.save()     s.modified     # True   
 

tldr; Query Session model, then modify matching sessions via SessionStore.

Your question is twofold, how to get session of a user, and how to modify data of arbitrary sessions (possibly outside of view).

Get all logged in user sessions

Since the session data is stored in an encoded form, I suggest getting all non-expired sessions, iterate over them, decode the data and check if associated with a user. Collect matching session keys to act on later.

from datetime import datetime  >>> sessions = Session.objects.exclude(expire_date__lte=datetime.now()) # [<Session: Session object>, <Session: Session object>]  >>> logged_in = [s.session_key for s in sessions if s.get_decoded().get('_auth_user_id')] # [u'qu1ir36jjvgbq2koqfa37b9hw1kb3ssu'] 

Modify sessions outside of view

Although the scenario is not explicitely stated, the docs do mention how to access sessions, without request context. Basically, SessionStore must be used to modify the session (which in turn will store the new data in Session)

from django.contrib.sessions.backends.db import SessionStore  # look up our sessions in session store for session_key in logged_in:     s = SessionStore(session_key=session_key)     s['test'] = True     s.save()     s.modified     # True 
</div
 
 
 
 

Связанный проблема

0  Вызов наборов запросов Django, когда пользователь нуждается в них  ( Calling django query sets when user needs them ) 
Я возвращаюсь и вперед с идеями, делая это, и никто из них не сработал, поэтому я попрошу идей. У меня есть модель под названием «Список», которые пользовател...

0  Настройки LDAP от Nginx в Django  ( Ldap settings from nginx to django ) 
Как передавать настройки LDAP из Nginx в django-auth-ldap? Настройки Nginx: <код> ldap_server YADRO { url ldap://testserver.com:389/dc=cor...

0  Ubuntu Supervisor Импорт модулей Python модулей  ( Ubuntu supervisor import python modules error ) 
Я использую супервизор для запуска Websocket Django в системе запуска. Когда я запускаю руководитель, он будет поднять ModulenotfoundError: Нет модуля с ...

2  Django Allauth - без проверки электронной почты для социальных пользователей  ( Django allauth no verification email for social users ) 
Я использую Django Allauth для потребностей Auth My Webse. Когда пользователь подписывает на мой сайт с социальной учетной записью - Google в основном (у ме...

0  Легко сравнивать планы MySQL в Джангу  ( Easy comparing mysql plans in django ) 
Есть ли способ распечатать запрос, например, из этой строки кода <код> Model.objects.all().order_by(sort_headers.get_order_by()) Я хочу планировать лучш...

-1  Ошибка сервера Django развертывание 500, ничего в журналах  ( Django deployment 500 server error nothing in logs ) 
Я получаю одну линейную запись в моем журнале, который только говорит «Получить 500 27», и браузер показывает 500 ошибку, а также естественным образом. Если ж...

-1  Отправить не возвращает желаемый результат в AJAX  ( Submit is not returning desired result in ajax ) 
<код> onTap0 Возвращает результат желания. Но если я сделаю это: <код> onTap1 не возвращает желаемый результат. Вместо того, чтобы возвращать данные в...

3  Редактирование Django на месте  ( Django editing in place ) 
Я хотел бы отобразить список записей из моей базы данных, а затем для каждой записи есть два поля, которые пользователь может редактировать на месте, не требу...

1  Не удалось не нулевое ограничение: attussaver_post.user_id  ( Not null constraint failed statussaver post user id ) 
Я пытаюсь сохранить данные пользователя через модельфу в Django. К сожалению, я наткнулся не против NULL CONSTRAINT: Statussaver_Post.user_id. Вот моя модель....

5  Как вставить 2 разных формы на одной и той же странице в Django  ( How insert 2 different forms on the same page in django ) 
Я должен вставить 2 формы на той же странице: 1) регистрационная форма 2) Форма входа . Так что, если я использую это в просмотру .py: <код> $(docume...

48  Ошибка auth_user с django 1.8 и syncdb / migrate  ( Auth user error with django 1 8 and syncdb migrate ) 
При обновлении в Django 1.8 (с zc.buildout) и запуском SyncDB или миграция, я получаю это сообщение: <Код> django.db.utils.ProgrammingError: relation "auth_...

8  GUNICORN.Socket: не удалось с результатом результата «Service-Start-Limit-Hit»  ( Gunicorn socket failed with result service start limit hit ) 
Я развернул приложение Django, и оно не удалось, потому что по какой-то причине файл gunicorn.socket не был создан, хотя перед добавлением nginx он отлично ра...

69  Как «очистить» порт при перезапуске Django Runserver  ( How to clear the port when restarting django runserver ) 
Часто при перезапуске Django Runserver, если я использую тот же номер порта, я получаю сообщение «Уже в использовании». Впоследствии мне нужно каждый раз увел...

-3  Как публиковать данные в api api django  ( How to post data to django rest api ) 
У меня есть модель Django, которая выглядит как следующее: <код> [ { "ticker": "AAPL", "balance_sheet": [], "income_statement": ...

46  Как использовать CURL с Django, CSRF токенами и почтовыми запросами  ( How to use curl with django csrf tokens and post requests ) 
Я использую скручивание для проверки одного из моих форм Django. Звонки, которые я пробовал (с ошибками из каждого, и над несколькими строками для читабельнос...