Django提供了兩個便捷的方法來獲取當前的儲存類:
class DefaultStorage[source]
DefaultStorage 提供對當前的默認儲存系統(tǒng)的延遲訪問,像DEFAULT_FILE_STORAGE中定義的那樣。DefaultStorage 內部使用了get_storage_class()。
get_storage_class([import_path=None])[source]
返回實現(xiàn)儲存API的類或者模塊。
當沒有帶著import_path 參數(shù)調用的時候, get_storage_class 會返回當前默認的儲存系統(tǒng),像DEFAULT_FILE_STORAGE中定義的那樣。如果提供了import_path, get_storage_class會嘗試從提供的路徑導入類或者模塊,并且如果成功的話返回它。如果導入不成功會拋出異常。
class FileSystemStorage([location=None, base_url=None, file_permissions_mode=None, directory_permissions_mode=None])[source]
FileSystemStorage類在本地文件系統(tǒng)上實現(xiàn)了基本的文件存儲功能。它繼承自Storage ,并且提供父類的所有公共方法的實現(xiàn)。
location
儲存文件的目錄的絕對路徑。默認為MEDIA_ROOT設置的值。
base_url
在當前位置提供文件儲存的URL。默認為MEDIA_URL設置的值。
file_permissions_mode
文件系統(tǒng)的許可,當文件保存時會接收到它。默認為FILE_UPLOAD_PERMISSIONS。
New in Django 1.7:
新增了file_permissions_mode屬性。之前,文件總是會接收到FILE_UPLOAD_PERMISSIONS許可。
directory_permissions_mode
文件系統(tǒng)的許可,當目錄保存時會接收到它。默認為FILE_UPLOAD_DIRECTORY_PERMISSIONS。
New in Django 1.7:
新增了directory_permissions_mode屬性。之前,目錄總是會接收到FILE_UPLOAD_DIRECTORY_PERMISSIONS許可。
注意
FileSystemStorage.delete()在提供的文件名稱不存在的時候并不會拋出任何異常。
class Storage[source]
Storage類為文件的存儲提供了標準化的API,并帶有一系列默認行為,所有其它的文件存儲系統(tǒng)可以按需繼承或者復寫它們。
注意
對于返回原生
datetime對象的方法,所使用的有效時區(qū)為os.environ['TZ']的當前值。要注意它總是可以通過Django的TIME_ZONE來設置。
accessed_time(name)[source]
返回包含文件的最后訪問時間的原生datetime對象。對于不能夠返回最后訪問時間的儲存系統(tǒng),會拋出NotImplementedError異常。
created_time(name)[source]
返回包含文件創(chuàng)建時間的原生datetime對象。對于不能夠返回創(chuàng)建時間的儲存系統(tǒng),會拋出NotImplementedError異常。
delete(name)[source]
刪除name引用的文件。如果目標儲存系統(tǒng)不支持刪除操作,會拋出NotImplementedError異常。
exists(name)[source]
如果提供的名稱所引用的文件在文件系統(tǒng)中存在,則返回True,否則如果這個名稱可用于新文件,返回False。
get_available_name(name, max_length=None)[source]
返回基于name參數(shù)的文件名稱,它在目標儲存系統(tǒng)中可用于寫入新的內容。
如果提供了max_length,文件名稱長度不會超過它。如果不能找到可用的、唯一的文件名稱,會拋出SuspiciousFileOperation 異常。
如果name命名的文件已存在,一個下劃線加上隨機7個數(shù)字或字母的字符串會添加到文件名稱的末尾,擴展名之前。
Changed in Django 1.7:
之前,下劃線和一位數(shù)字(比如"_1","_2",以及其他)會添加到文件名稱的末尾,直到目標目錄中發(fā)現(xiàn)了可用的名稱。一些惡意的用戶會利用這一確定性的算法來進行dos攻擊。這一變化也在1.6.6, 1.5.9, 和 1.4.14中出現(xiàn)。
Changed in Django 1.8:
新增了max_length參數(shù)。
get_valid_name(name)[source]
返回基于name參數(shù)的文件名稱,它適用于目標儲存系統(tǒng)。
listdir(path)[source]
列出特定目錄的所有內容,返回一個包含2元組的列表;第一個元素是目錄,第二個是文件。對于不能夠提供列表功能的儲存系統(tǒng),拋出NotImplementedError異常。
modified_time(name)[source]
返回包含最后修改時間的原生datetime對象。對于不能夠返回最后修改時間的儲存系統(tǒng),拋出NotImplementedError異常。
open(name, mode='rb')[source]
通過提供的name打開文件。注意雖然返回的文件確保為File對象,但可能實際上是它的子類。在遠程文件儲存的情況下,這意味著讀寫操作會非常慢,所以警告一下。
path(name)[source]
本地文件系統(tǒng)的路徑,文件可以用Python標準的open()在里面打開。對于不能從本地文件系統(tǒng)訪問的儲存系統(tǒng),拋出NotImplementedError異常。
save(name, content, max_length=None)[source]
使用儲存系統(tǒng)來保存一個新文件,最好帶有特定的名稱。如果名稱為 name的文件已存在,儲存系統(tǒng)會按需修改文件名稱來獲取一個唯一的名稱。返回被儲存文件的實際名稱。
max_length參數(shù)會傳遞給get_available_name()。
content參數(shù)必須為django.core.files.File或者File子類的實例。
Changed in Django 1.8:
新增了max_length參數(shù)。
size(name)[source]
返回name所引用的文件的總大小,以字節(jié)為單位。對于不能夠返回文件大小的儲存系統(tǒng),拋出NotImplementedError異常。
url(name)[source]
返回URL,通過它可以訪問到name所引用的文件。對于不支持通過URL訪問的儲存系統(tǒng),拋出NotImplementedError異常。
譯者:Django 文檔協(xié)作翻譯小組,原文:Storage API。
本文以 CC BY-NC-SA 3.0 協(xié)議發(fā)布,轉載請保留作者署名和文章出處。
Django 文檔協(xié)作翻譯小組人手緊缺,有興趣的朋友可以加入我們,完全公益性質。交流群:467338606。