文件存储 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[source]¶
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)[source]¶
FileSystemStorage
类在本地文件系统上实现基本的文件存储。它继承自Storage
并为其所有公共方法提供实现。注意
如果给定的文件名不存在,
FileSystemStorage.delete()
方法不会引发异常。- location[source]¶
保存文件的目录的绝对路径。默认为
MEDIA_ROOT
设置的值。
- file_permissions_mode[source]¶
文件保存后将接收的文件系统权限。默认为
FILE_UPLOAD_PERMISSIONS
。
- directory_permissions_mode[source]¶
目录保存后将接收的文件系统权限。默认为
FILE_UPLOAD_DIRECTORY_PERMISSIONS
。
- allow_overwrite¶
- Django 5.1 新特性。
用于控制是否允许保存新文件覆盖现有文件的标志。默认为
False
。
- get_created_time(name)[source]¶
返回系统的 ctime 的
datetime
,即os.path.getctime()
。在某些系统(如 Unix)上,这是最后一次元数据更改的时间,在其他系统(如 Windows)上,它是文件的创建时间。
InMemoryStorage
类¶
- class InMemoryStorage(location=None, base_url=None, file_permissions_mode=None, directory_permissions_mode=None)[source]¶
InMemoryStorage
类实现基于内存的文件存储。它没有持久性,但对于通过避免磁盘访问来加快测试速度可能很有用。- location[source]¶
分配给文件的目录名称的绝对路径。默认为
MEDIA_ROOT
设置的值。
- file_permissions_mode[source]¶
分配给文件的系统文件权限,为与
FileSystemStorage
兼容而提供。默认为FILE_UPLOAD_PERMISSIONS
。
- directory_permissions_mode[source]¶
分配给目录的系统文件权限,为与
FileSystemStorage
兼容而提供。默认为FILE_UPLOAD_DIRECTORY_PERMISSIONS
。
Storage
类¶
- class Storage[source]¶
Storage
类提供了一个标准化的文件存储 API,以及所有其他存储系统可以根据需要继承或覆盖的一组默认行为。注意
当方法返回简单的
datetime
对象时,使用的有效时区将是os.environ['TZ']
的当前值;请注意,这通常由 Django 的TIME_ZONE
设置。- get_accessed_time(name)[source]¶
返回文件的最后访问时间的
datetime
。对于无法返回最后访问时间的存储系统,这将引发NotImplementedError
。如果
USE_TZ
为True
,则返回一个带时区的datetime
,否则返回本地时区中的一个简单datetime
。
- get_alternative_name(file_root, file_ext)[source]¶
基于
file_root
和file_ext
参数返回一个备用文件名,在扩展名之前添加下划线和一个随机的 7 个字符的字母数字字符串。
- get_available_name(name, max_length=None)[source]¶
基于
name
参数返回一个文件名,该文件名可用于写入目标存储系统上的新内容。如果提供,文件名的长度不会超过
max_length
。如果找不到可用的唯一文件名,则会引发SuspiciousFileOperation
异常。如果名为
name
的文件已存在,则调用get_alternative_name()
来获取备用名称。
- get_created_time(name)[source]¶
返回文件的创建时间
datetime
。对于无法返回创建时间的存储系统,这将引发NotImplementedError
。如果
USE_TZ
为True
,则返回一个带时区的datetime
,否则返回本地时区中的一个简单datetime
。
- get_modified_time(name)[source]¶
返回文件的最后修改时间的
datetime
。对于无法返回最后修改时间的存储系统,这将引发NotImplementedError
。如果
USE_TZ
为True
,则返回一个带时区的datetime
,否则返回本地时区中的一个简单datetime
。
- generate_filename(filename)[source]¶
通过调用
get_valid_name()
来验证filename
,并返回一个要传递给save()
方法的文件名。filename
参数可能包含由FileField.upload_to
返回的路径。在这种情况下,路径不会传递给get_valid_name()
,但会预先添加到结果名称中。默认实现使用
os.path
操作。如果这对您的存储不适用,请覆盖此方法。
- listdir(path)[source]¶
列出指定路径的内容,返回一个包含两个列表的元组;第一个列表是目录,第二个列表是文件。对于无法提供此类列表的存储系统,这将引发
NotImplementedError
。
- open(name, mode='rb')[source]¶
打开由
name
指定的文件。请注意,尽管返回的文件保证是File
对象,但它实际上可能是某个子类。对于远程文件存储,这意味着读写速度可能非常慢,请注意。
- path(name)[source]¶
可以使用 Python 标准
open()
函数打开文件的本地文件系统路径。对于无法从本地文件系统访问的存储系统,这将引发NotImplementedError
。
- save(name, content, max_length=None)[source]¶
使用存储系统保存新文件,最好使用指定的名称。如果已存在具有此名称
name
的文件,则存储系统可能会根据需要修改文件名以获得唯一的名称。将返回存储文件的实际名称。max_length
参数将传递给get_available_name()
。content
参数必须是django.core.files.File
的实例或可以包装在File
中的文件类对象。