国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

Django4.0 使用會話-擴展數(shù)據(jù)庫支持的會話引擎

2022-03-16 18:01 更新

可以通過繼承 ?AbstractBaseSession ?和 ?SessionStore?類來創(chuàng)建基于Django中包含的自定義數(shù)據(jù)庫支持的會話引擎(即 ?db ?和 ?cached_db ?)。

?AbstractBaseSession ?和 ?BaseSessionManager ?可以從 ?django.contrib.sessions.base_session導入,因此它們可以在 ?INSTALLED_APPS ?不包含 ?django.contrib.sessions? 的情況下導入。

class base_session.AbstractBaseSession

抽象基本會話模型

  • ?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 ?自定義模型管理器。

class base_session.BaseSessionManager

  • ?encode(session_dict)?:返回序列化并編碼為字符串的給定會話字典。編碼由綁定到模型類的會話存儲類執(zhí)行。
  • ?save(session_key, session_dict, expire_date)?:為提供的會話密鑰保存會話數(shù)據(jù),或在數(shù)據(jù)為空時刪除會話。

通過重寫以下描述的方法和屬性,實現(xiàn)了 ?SessionStore ?類的定制:

class backends.db.SessionStore

實現(xiàn)數(shù)據(jù)庫支持的會話存儲

  • ?classmethod get_model_class()?:如果需要的話,重寫此方法以返回自定義會話模型。
  • ?create_model_instance(data)?:返回會話模型對象的新實例,該實例表示當前會話狀態(tài)。重寫此方法提供了在將會話模型數(shù)據(jù)保存到數(shù)據(jù)庫之前修改它的能力。

class backends.cached_db.SessionStore

實現(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'

    # ...


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號