簡體   English   中英

僅適用於Django中當前用戶的Python類實例

[英]Python class instance only for current user in Django

我是Django的新手,正在嘗試找出如何為當前用戶保存類實例的方法,正是我想做的就是將用戶登錄到Firebase,然后從數據庫中檢索數據在firebase上並將該數據保存到一個本地類上,該類僅在用戶注銷之前才可用,但是我所有的嘗試都將這些類實例保存為全局實例(因此實際上每個用戶都可以使用它們,並且將覆蓋前一個實例)。

我的第一次嘗試是在應用程序的views.py上,看起來像這樣:

APPMANAGER = FirebaseManager()

def homepage(request: HttpRequest) -> HttpResponse:
    APPManager.loadData(request.POST.get("data"))
    return HttpResponse("Done")

但是該APPMANAGER將被全局保存(如果重新啟動服務器,還將被刪除)。

我也在檢查Django會話( https://docs.djangoproject.com/en/2.2/topics/http/sessions/ ),這看起來像我想要做的,但是它只需要可序列化的數據,而我想要保存自定義類實例,最好的方法是什么?

感謝@FelipeFaria的評論,我得以實現我想要的。

我使用了Django會話,在我看來,存儲在數據庫上的緩存似乎是執行此操作的正確方法,首先,我配置了會話以安裝以下django應用程序(實際上默認情況下已安裝)

Settings.py

INSTALLED_APPS = [
    #otherApps
    'django.contrib.sessions',
    #OtherApps
]

然后,將以下內容添加到另一行:

SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'

這將配置會話以在數據庫上保存緩存,文檔說性能相當不錯,但是一個簡單的緩存系統是最好的,因為它忽略了持久性(我需要)。

之后,我將字典中需要的數據存儲在Django提供的request.session字典中(該請求是在每個Django視圖上發送的HttpRequest),並在需要時創建了類的新實例並運行了一個方法從緩存中加載所有屬性。

views.py的示例

def index(request: HttpRequest) -> HttpResponse:
    if 'logged in' in request.session:
        user = User()
        user.load_data(request.session['user_data'])
        return render(request, "main/index.html", context={"user": user})        
    return redirect("main:index")

在文檔中可以更好地解釋getter,setter,deleter和它們的內容: https ://docs.djangoproject.com/en/2.2/topics/http/sessions/#configuring-sessions

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM