檔案儲存 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
提供對STORAGES
中default
鍵定義的預設儲存系統的延遲存取。DefaultStorage
內部使用storages
。
- default_storage¶
default_storage
是DefaultStorage
的實例。
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
設定的值。
- 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
設定的值。
- 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
設定的。- get_accessed_time(name)[原始碼]¶
回傳檔案上次存取時間的
datetime
物件。對於無法回傳上次存取時間的儲存系統,這將拋出NotImplementedError
錯誤。如果
USE_TZ
為True
,則回傳一個帶時區的datetime
物件,否則回傳本地時區的 naivedatetime
物件。
- get_alternative_name(file_root, file_ext)[原始碼]¶
根據
file_root
和file_ext
參數回傳一個替代檔名,底線加上一個隨機的 7 個字元字母數字字串會附加到副檔名之前的檔名。
- get_available_name(name, max_length=None)[原始碼]¶
根據
name
參數回傳一個檔名,該檔名在目標儲存系統上是免費且可用於寫入新內容的。如果提供了
max_length
,則檔名的長度不會超過它。如果找不到免費的唯一檔名,則會拋出SuspiciousFileOperation
異常。如果具有
name
的檔案已存在,則會呼叫get_alternative_name()
來取得替代名稱。
- get_created_time(name)[原始碼]¶
回傳檔案建立時間的
datetime
物件。對於無法回傳建立時間的儲存系統,這將拋出NotImplementedError
錯誤。如果
USE_TZ
為True
,則回傳一個帶時區的datetime
物件,否則回傳本地時區的 naivedatetime
物件。
- get_modified_time(name)[原始碼]¶
回傳檔案上次修改時間的
datetime
物件。對於無法回傳上次修改時間的儲存系統,這將拋出NotImplementedError
錯誤。如果
USE_TZ
為True
,則回傳一個帶時區的datetime
物件,否則回傳本地時區的 naivedatetime
物件。
- 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
的類檔案物件。