Django4.0 使用會話-在視圖外使用會話

2022-03-16 18:00 更新

這部分的例子直接從 ?django.contrib.sessions.backends.db? 后端導(dǎo)入 ?SessionStore? 對象。在你自己的代碼里,你應(yīng)該考慮從 ?SESSION_ENGINE? 指定的會話引擎導(dǎo)入 ?SessionStore ?。

>>> from importlib import import_module
>>> from django.conf import settings
>>> SessionStore = import_module(settings.SESSION_ENGINE).SessionStore

可以在視圖外對會話數(shù)據(jù)進(jìn)行操作的 API :

>>> from django.contrib.sessions.backends.db import SessionStore
>>> s = SessionStore()
>>> # stored as seconds since epoch since datetimes are not serializable in JSON.
>>> s['last_login'] = 1376587691
>>> s.create()
>>> s.session_key
'2b1189a188b44ad18c35e113ac6ceead'
>>> s = SessionStore(session_key='2b1189a188b44ad18c35e113ac6ceead')
>>> s['last_login']
1376587691

?SessionStore.create()? 用來創(chuàng)建一個新會話(即不從會話中加載,并帶有 ?session_key=None?)。?save()? 用來保存已存在的會話(即從會話存儲中加載)。在新會話上調(diào)用 ?save()? 也許會工作,但生成與現(xiàn)有會話相沖突的 ?session_key ?的概率很小。?create()? 調(diào)用 ?save()? 并循環(huán),直到生成了未使用過的 ?session_key ?。
如果你正在使用 ?django.contrib.sessions.backends.db? 后端,每個會話就會是一個普通的 Django 模型。 ?Session ?模型在 ?django/contrib/sessions/models.py? 中定義。因?yàn)樗褪且粋€普通模型,你可以使用普通的 Django 數(shù)據(jù)庫 API 訪問會話。

>>> from django.contrib.sessions.models import Session
>>> s = Session.objects.get(pk='2b1189a188b44ad18c35e113ac6ceead')
>>> s.expire_date
datetime.datetime(2005, 8, 20, 13, 35, 12)

注意你將需要調(diào)用 ?get_decoded()? 來得到會話字典。這是必須的,因?yàn)樽值涫前凑站幋a格式存儲的:

>>> s.session_data
'KGRwMQpTJ19hdXRoX3VzZXJfaWQnCnAyCkkxCnMuMTExY2ZjODI2Yj...'
>>> s.get_decoded()
{'user_id': 42}


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號