簡體   English   中英

讀取函數外部的變量

[英]reading a variable outside the function

我正在嘗試讀取這樣的內存文件:

sttr=request.FILES['file_field'].read()

現在,我希望sttr可以運行,除非網站關閉或關閉了特定時間。 我不能將其全局化,因為它發生在數據泄露的情況下,我不想將其存儲在數據庫中,只需讀取它並將其存儲在一個變量中,然后將該變量傳遞給views.py中的另一個函數,我就可以不使用會話,因為我沒有用於session[key]特定key 是否有其他方法可以從另一個views.py的內存文件中獲取數據

def mainpage(request):
     sttr=request.FILES['file_field'].read()

def hh(request):
     print(sttr)

沒有使sttr全球化?

要在請求之間共享一些數據,您必須將其存儲在某個位置,並且能夠以一種或另一種方式進行檢索。 不能 (不WSGI應用至少),因為一個WSGI過程提供一個以上的用戶(所以user2的數據將覆蓋user1的數據)確實是使用全局變量,這和你平時有至少半打服務器進程(和我說關於此處的單服務器設置),因此它們中的任何一個都可以滿足給定用戶的“下一個”請求,因此您最終將在一個進程中設置全局變量,然后嘗試在另一個進程中讀取全局變量-由於變量是每個變量,因此顯然不起作用-處理。

這就是為什么有人發明了cookie和會話-在請求之間共享或多或少的易失數據。

如果文件很小(我的意思是 -最大幾千字節左右,最好是更少),則可以將其內容存儲在會話中-提到“我不能使用會話,因為我沒有特定的密鑰for session [key]“是完全沒有意義的,Django的request.session對象類似於dict,您可以設置所需的任何鍵,否則將完全沒有用。

如果更大,您寧願在文件系統中的已知位置寫入文件內容,然后將路徑存儲在會話中(會話已加載到內存中,您不想用數千兆字節的用戶來破壞服務器的內存內容)。

暫無
暫無

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

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