W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
可以通過繼承 ?AbstractBaseSession
?和 ?SessionStore
?類來創(chuàng)建基于Django中包含的自定義數(shù)據(jù)庫支持的會話引擎(即 ?db
?和 ?cached_db
?)。
?AbstractBaseSession
?和 ?BaseSessionManager
?可以從 ?django.contrib.sessions.base_session
導入,因此它們可以在 ?INSTALLED_APPS
?不包含 ?django.contrib.sessions
? 的情況下導入。
抽象基本會話模型
session_key
?:主鍵。字段本身可能包含多達40個字符。當前實現(xiàn)生成一個32個字符的字符串(一個隨機的數(shù)字序列和小寫的ascii字母)。session_data
?:包含編碼和序列化會話字典的字符串。expire_date
?:指定會話何時到期的日期時間。但是,過期的會話對用戶不可用,但在運行 clearsessions 管理命令之前,它們仍可能存儲在數(shù)據(jù)庫中。classmethod get_session_store_class()
?:返回要與此會話模型一起使用的會話存儲類。get_decoded()
?:返回解碼的會話數(shù)據(jù)。解碼由會話存儲類執(zhí)行。還可以通過子類 ?BaseSessionManager
?自定義模型管理器。
encode(session_dict)
?:返回序列化并編碼為字符串的給定會話字典。編碼由綁定到模型類的會話存儲類執(zhí)行。save(session_key, session_dict, expire_date)
?:為提供的會話密鑰保存會話數(shù)據(jù),或在數(shù)據(jù)為空時刪除會話。通過重寫以下描述的方法和屬性,實現(xiàn)了 ?SessionStore
?類的定制:
實現(xiàn)數(shù)據(jù)庫支持的會話存儲
classmethod get_model_class()
?:如果需要的話,重寫此方法以返回自定義會話模型。create_model_instance(data)
?:返回會話模型對象的新實例,該實例表示當前會話狀態(tài)。重寫此方法提供了在將會話模型數(shù)據(jù)保存到數(shù)據(jù)庫之前修改它的能力。實現(xiàn)緩存數(shù)據(jù)庫支持的會話存儲
cache_key_prefix
?:添加到會話鍵中以生成緩存鍵字符串的前綴。下面的示例顯示了一個自定義數(shù)據(jù)庫支持的會話引擎,它包括一個用于存儲帳戶id的附加數(shù)據(jù)庫列(從而提供了一個選項,用于查詢數(shù)據(jù)庫中帳戶的所有活動會話):
from django.contrib.sessions.backends.db import SessionStore as DBStore
from django.contrib.sessions.base_session import AbstractBaseSession
from django.db import models
class CustomSession(AbstractBaseSession):
account_id = models.IntegerField(null=True, db_index=True)
@classmethod
def get_session_store_class(cls):
return SessionStore
class SessionStore(DBStore):
@classmethod
def get_model_class(cls):
return CustomSession
def create_model_instance(self, data):
obj = super().create_model_instance(data)
try:
account_id = int(data.get('_auth_user_id'))
except (ValueError, TypeError):
account_id = None
obj.account_id = account_id
return obj
如果要從Django的內置 ?cached_db
?會話存儲遷移到基于?cached_db
?的自定義存儲,則應重寫緩存鍵前綴,以防止名稱空間沖突:
class SessionStore(CachedDBStore):
cache_key_prefix = 'mysessions.custom_cached_db_backend'
# ...
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: