File对象

django.core.files模块及其子模块包含用于在Django中进行基本文件处理的内置类。

File

File(file_object)[source]

File类是一个对Python中file对象的轻量级包装,加上了一些特定于Django的属性。 在内部,Django在需要表示文件时使用这个类。

File对象有以下的属性和方法:

name

文件的名字,包含 MEDIA_ROOT 中的相对路径。

size

文件的大小(以字节为单位)

file

这个类所包装的底层file对象。

在子类中注意这个属性。

包括ContentFileFieldFileFile的一些子类可以用Python file object 在这些情况下,这个属性本身可能是一个File子类(不一定是相同的子类)。 只要有可能,就使用子类本身的属性和方法,而不是子类的file属性。

mode

文件的读/写模式。

open(mode=None)[source]

打开或重新打开该文件(也是File.seek(0))。 mode参数允许使用与Python内置的open()相同的值。

当重新打开一个文件时,mode将覆盖文件最初打开的任何模式; None表示以原始模式重新打开。

它可以用作上下文管理器,例如 file.open() F:.

在Django 2.0中更改:

上下文管理器支持已添加。

__iter__()[source]

迭代一次产生一行的文件。

chunks(chunk_size=None)[source]

迭代产生给定大小的“块”的文件。 chunk_size defaults to 64 KB.

这对于非常大的文件特别有用,因为它允许将它们从磁盘流式传输并避免将整个文件存储在内存中。

multiple_chunks(chunk_size=None)[source]

如果文件足够大,需要多个块访问其所有内容,则返回Truechunk_size

close()[source]

关闭文件。

In addition to the listed methods, File exposes the following attributes and methods of its file object: encoding, fileno, flush, isatty, newlines, read, readinto, readline, readlines, seek, tell, truncate, write, writelines, readable(), writable(), and seekable().

在Django 1.11中更改:

添加了readable()writable()方法。

ContentFile

ContentFile(File)[source]

The ContentFile class inherits from File, but unlike File it operates on string content (bytes also supported), rather than an actual file. 例如:

from django.core.files.base import ContentFile

f1 = ContentFile("esta sentencia está en español")
f2 = ContentFile(b"these are bytes")

ImageFile

ImageFile(file_object)[source]

Django专门为图像提供了一个内置的类。 django.core.files.images.ImageFile inherits all the attributes and methods of File, and additionally provides the following:

width

图像的宽度(以像素为单位)。

height

图像的高度(以像素为单位)。

附加到对象上的附加方法

与对象关联的任何File(如下面的Car.photo)也会有一些额外的方法:

File.save(name, content, save=True)

用提供的文件名和内容保存新文件。 这不会替换现有的文件,而是会创建一个新文件并更新对象以指向它。 如果saveTrue,则保存文件后将调用模型的save()方法。 就是这两行:

>>> car.photo.save('myphoto.jpg', content, save=False)
>>> car.save()

相当于:

>>> car.photo.save('myphoto.jpg', content, save=True)

请注意,content参数必须是FileFile的子类的实例,例如ContentFile

File.delete(save=True)

从模型实例中删除文件并删除底层文件。 如果saveTrue,则一旦文件被删除,将调用模型的save()方法。