File 对象¶
django.core.files 模块及其子模块包含了 Django 中基本的文件处理的内置类。
File 类¶
-
class
File(file_object, name=None)[源代码]¶ File类是对 Python file object 的一个简单的封装,并增加了一些 Django 特有的功能。在内部,当 Django 需要表示一个文件时,会使用这个类。File对象具有以下属性和方法:-
name¶ 文件名,包括
MEDIA_ROOT的相对路径。
-
size¶ 文件的大小,单位为字节。
-
file¶ 该类封装的底层 file object。
在子类中要小心这个属性。
一些
File的子类,包括ContentFile和FieldFile,可以用 Python file object 以外的对象来替换这个属性。在这些情况下,这个属性本身可能是一个File子类(而且不一定是同一个子类)。只要有可能,就使用子类本身的属性和方法,而不是子类的file属性。
-
mode¶ 文件的读/写模式。
-
open(mode=None)[源代码]¶ 打开或重新打开文件(它也做
File.seek(0))。mode参数允许的值与 Python 内置的open()相同。当重新打开一个文件时,
mode将覆盖文件原来打开的任何模式;None表示用原来的模式重新打开。它可以作为一个上下文管理器使用,例如
with file.open() as f:。
-
chunks(chunk_size=None)[源代码]¶ 对文件进行迭代,产生给定大小的“块”。
chunk_size默认为 64KB。这对非常大的文件特别有用,因为它允许将它们从磁盘上串联起来,避免将整个文件存储在内存中。
除了列出的方法外,
File还暴露了它的file对象的以下属性和方法:encoding、fileno、flush、isat。encoding、fileno、flush、isatty、newlines、read、readinto、readline、readlines、seek、tell、truncate、write、writelines、readable()、writable()和seekable()。-
ContentFile 类¶
ImageFile 类¶
附加在对象上的文件方法¶
任何与对象相关联的 File (如下面的 Car.photo)也会有几个额外的方法:
-
File.save(name, content, save=True)¶ 使用提供的文件名和内容保存一个新文件。这不会替换现有的文件,但会创建一个新的文件并更新对象以指向它。如果
save为True,文件保存后将调用模型的save()方法。也就是这两行:>>> car.photo.save('myphoto.jpg', content, save=False) >>> car.save()
等价于:
>>> car.photo.save('myphoto.jpg', content, save=True)
请注意,
content参数必须是File或File的子类的实例,如ContentFile。
-
File.delete(save=True)¶ 从模型实例中删除文件并删除底层文件。如果
save是True,一旦文件被删除,模型的save()方法将被调用。