檔案儲存 API

取得預設儲存類別

Django 提供了方便的方法來存取預設儲存類別

storages

一個類似字典的物件,允許使用 STORAGES 定義的別名來檢索儲存實例。

storages 有一個屬性 backends,預設為 STORAGES 中提供的原始值。

此外,storages 提供了一個 create_storage() 方法,該方法接受在 STORAGES 中用於後端的字典,並返回基於該後端定義的儲存實例。這對於需要在測試中實例化儲存的第三方套件可能很有用

>>> from django.core.files.storage import storages
>>> storages.backends
{'default': {'BACKEND': 'django.core.files.storage.FileSystemStorage'},
 'staticfiles': {'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage'},
 'custom': {'BACKEND': 'package.storage.CustomStorage'}}
>>> storage_instance = storages.create_storage({"BACKEND": "package.storage.CustomStorage"})
class DefaultStorage[原始碼]

DefaultStorage 提供對 STORAGESdefault 鍵定義的預設儲存系統的延遲存取。DefaultStorage 內部使用 storages

default_storage

default_storageDefaultStorage 的實例。

FileSystemStorage 類別

class FileSystemStorage(location=None, base_url=None, file_permissions_mode=None, directory_permissions_mode=None, allow_overwrite=False)[原始碼]

FileSystemStorage 類別在本地檔案系統上實作基本的檔案儲存。它繼承自 Storage,並為其所有公開方法提供了實作。

注意

如果給定的檔案名稱不存在,FileSystemStorage.delete() 方法不會引發例外。

location[原始碼]

將儲存檔案的目錄的絕對路徑。預設為您的 MEDIA_ROOT 設定的值。

base_url[原始碼]

用於服務儲存在此位置的檔案的 URL。預設為您的 MEDIA_URL 設定的值。

file_permissions_mode[原始碼]

檔案在儲存時將收到的檔案系統權限。預設為 FILE_UPLOAD_PERMISSIONS

directory_permissions_mode[原始碼]

目錄在儲存時將收到的檔案系統權限。預設為 FILE_UPLOAD_DIRECTORY_PERMISSIONS

allow_overwrite
Django 5.1 中的新功能。

控制是否允許將新檔案覆蓋現有檔案的標誌。預設為 False

get_created_time(name)[原始碼]

返回系統 ctime 的 datetime,即 os.path.getctime()。在某些系統(如 Unix)上,這是上次中繼資料變更的時間;而在其他系統(如 Windows)上,則是檔案的建立時間。

InMemoryStorage 類別

class InMemoryStorage(location=None, base_url=None, file_permissions_mode=None, directory_permissions_mode=None)[原始碼]

InMemoryStorage 類別實作了基於記憶體的檔案儲存。它沒有持久性,但透過避免磁碟存取,可以加快測試速度。

location[原始碼]

指派給檔案的目錄名稱的絕對路徑。預設為您的 MEDIA_ROOT 設定的值。

base_url[原始碼]

用於服務儲存在此位置的檔案的 URL。預設為您的 MEDIA_URL 設定的值。

file_permissions_mode[原始碼]

為了與 FileSystemStorage 相容,提供指派給檔案的檔案系統權限。預設為 FILE_UPLOAD_PERMISSIONS

directory_permissions_mode[原始碼]

為了與 FileSystemStorage 相容,提供指派給目錄的檔案系統權限。預設為 FILE_UPLOAD_DIRECTORY_PERMISSIONS

Storage 類別

class Storage[原始碼]

Storage 類別提供了一個標準化的 API 來儲存檔案,並提供一組預設行為,其他所有儲存系統都可以繼承或在必要時覆寫這些行為。

注意

當方法回傳 naive datetime 物件時,實際使用的時區將會是 os.environ['TZ'] 的當前值;請注意,這通常是從 Django 的 TIME_ZONE 設定的。

delete(name)[原始碼]

刪除由 name 參照的檔案。如果目標儲存系統不支援刪除,則會拋出 NotImplementedError 錯誤。

exists(name)[原始碼]

如果給定名稱參照的檔案已存在於儲存系統中,則回傳 True

get_accessed_time(name)[原始碼]

回傳檔案上次存取時間的 datetime 物件。對於無法回傳上次存取時間的儲存系統,這將拋出 NotImplementedError 錯誤。

如果 USE_TZTrue,則回傳一個帶時區的 datetime 物件,否則回傳本地時區的 naive datetime 物件。

get_alternative_name(file_root, file_ext)[原始碼]

根據 file_rootfile_ext 參數回傳一個替代檔名,底線加上一個隨機的 7 個字元字母數字字串會附加到副檔名之前的檔名。

get_available_name(name, max_length=None)[原始碼]

根據 name 參數回傳一個檔名,該檔名在目標儲存系統上是免費且可用於寫入新內容的。

如果提供了 max_length,則檔名的長度不會超過它。如果找不到免費的唯一檔名,則會拋出 SuspiciousFileOperation 異常。

如果具有 name 的檔案已存在,則會呼叫 get_alternative_name() 來取得替代名稱。

get_created_time(name)[原始碼]

回傳檔案建立時間的 datetime 物件。對於無法回傳建立時間的儲存系統,這將拋出 NotImplementedError 錯誤。

如果 USE_TZTrue,則回傳一個帶時區的 datetime 物件,否則回傳本地時區的 naive datetime 物件。

get_modified_time(name)[原始碼]

回傳檔案上次修改時間的 datetime 物件。對於無法回傳上次修改時間的儲存系統,這將拋出 NotImplementedError 錯誤。

如果 USE_TZTrue,則回傳一個帶時區的 datetime 物件,否則回傳本地時區的 naive datetime 物件。

get_valid_name(name)[原始碼]

根據 name 參數回傳一個適用於目標儲存系統的檔名。

generate_filename(filename)[原始碼]

透過呼叫 get_valid_name() 驗證 filename,並回傳一個要傳遞給 save() 方法的檔名。

filename 引數可以包含 FileField.upload_to 回傳的路徑。在這種情況下,該路徑不會傳遞給 get_valid_name(),但會重新附加到產生的名稱。

預設實作使用 os.path 操作。如果這不適合您的儲存,請覆寫此方法。

listdir(path)[原始碼]

列出指定路徑的內容,回傳一個包含兩個列表的 tuple;第一個項目是目錄,第二個項目是檔案。對於無法提供此類列表的儲存系統,這將拋出 NotImplementedError 錯誤。

open(name, mode='rb')[原始碼]

開啟由 name 給定的檔案。請注意,雖然回傳的檔案保證是 File 物件,但它實際上可能是某些子類別。對於遠端檔案儲存,這表示讀取/寫入可能會很慢,因此請注意。

path(name)[原始碼]

可以使用 Python 的標準 open() 開啟檔案的本機檔案系統路徑。對於無法從本機檔案系統存取的儲存系統,這會引發 NotImplementedError 錯誤。

save(name, content, max_length=None)[原始碼]

使用儲存系統儲存一個新的檔案,最好使用指定的名稱。如果已經存在具有此名稱 name 的檔案,儲存系統可能會修改檔名以取得唯一的名稱。將會回傳儲存檔案的實際名稱。

max_length 參數會傳遞給 get_available_name()

content 參數必須是 django.core.files.File 的實例,或是一個可以被包裝成 File 的類檔案物件。

size(name)[原始碼]

回傳以位元組為單位,由 name 參照的檔案總大小。對於無法回傳檔案大小的儲存系統,這會引發 NotImplementedError 錯誤。

url(name)[原始碼]

回傳可以存取由 name 參照的檔案內容的 URL。對於不支援透過 URL 存取的儲存系統,這會引發 NotImplementedError 錯誤。

返回頂部