文件存储 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_storageDefaultStorage 的一个实例。

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 设置的值。

base_url[source]

在此位置存储的文件的服务 URL。默认为 MEDIA_URL 设置的值。

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 设置的值。

base_url[source]

在此位置存储的文件的服务 URL。默认为 MEDIA_URL 设置的值。

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 设置。

delete(name)[source]

删除 name 引用的文件。如果目标存储系统不支持删除,则会引发 NotImplementedError

exists(name)[source]

如果存储系统中已经存在由给定名称引用的文件,则返回 True

get_accessed_time(name)[source]

返回文件的最后访问时间的 datetime。对于无法返回最后访问时间的存储系统,这将引发 NotImplementedError

如果 USE_TZTrue,则返回一个带时区的 datetime,否则返回本地时区中的一个简单 datetime

get_alternative_name(file_root, file_ext)[source]

基于 file_rootfile_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_TZTrue,则返回一个带时区的 datetime,否则返回本地时区中的一个简单 datetime

get_modified_time(name)[source]

返回文件的最后修改时间的 datetime。对于无法返回最后修改时间的存储系统,这将引发 NotImplementedError

如果 USE_TZTrue,则返回一个带时区的 datetime,否则返回本地时区中的一个简单 datetime

get_valid_name(name)[source]

基于 name 参数返回一个适合在目标存储系统上使用的文件名。

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 中的文件类对象。

size(name)[source]

返回 name 引用的文件的大小(以字节为单位)。对于无法返回文件大小的存储系统,这将引发 NotImplementedError

url(name)[source]

返回可以访问 name 引用的文件内容的 URL。对于不支持通过 URL 访问的存储系统,这将引发 NotImplementedError

返回顶部