File对象

django.core.files模块及其子模块包含用于基本文件处理的内建类。

File

class File(file_object)[source]

File类是Python文件对象的一个简单封装,带有Django特定的附加功能。 需要表示文件的时候,Django内部会使用这个类。

File对象拥有下列属性和方法:

name

文件名称,包括相对于MEDIA_ROOT的相对路径。

size

文件的字节数。

file

这个类所封装的原生的文件对象

在子类中小心这个属性。

File的一些子类,包括ContentFileFieldFile,可以用其它非Python文件对象替换这个属性。 在这些情况下,此属性本身可能是File的一个子类(并不一定是相同的子类)。 只要有可能,使用子类本身的属性和方法,而不是子类的file属性的属性和方法。

mode

文件的读写模式。

open(mode=None)[source]

打开或者重新打开文件(同时会执行File.seek(0))。 mode参数的值和Python内建的open()相同。

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

__iter__()[source]

迭代整个文件,并且每次生成一行。

chunks(chunk_size=None)[source]

迭代整个文件,并生成指定大小的一部分内容。 chunk_size默认为64 KB。

处理大文件时这会非常有用,因为这样可以把他们从磁盘中读取出来,而避免将整个文件存到内存中。

multiple_chunks(chunk_size=None)[source]

如果文件足够大,需要按照提供的True切分成几个部分来访问到所有内容,则返回chunk_size

close()[source]

关闭文件。

除了列出的这些方法之外,File还开放它的file对象的下列属性和方法:encoding, fileno, flush, isatty, newlines, read, readinto, readline, readlines, seek, softspace, tell, truncate, write, writelines, xreadlines, readable(), writable()seekable()

Django 1.11中的更改:

添加了readable()writable()方法,并在Python 2中提供了seekable()方法。

ContentFile

class ContentFile(File)[source]

ContentFile类继承自File,但是并不像File那样,它操作字符串的内容(也支持字节集),而不是一个实际的文件。 像这样:

from __future__ import unicode_literals
from django.core.files.base import ContentFile

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

ImageFile

class ImageFile(file_object)[source]

Django特地为图像提供了这个内建类。 django.core.files.images.ImageFile继承了 File的所有属性和方法,并且额外提供了以下的属性:

width

图像的像素单位宽度。

height

图像的像素单位高度。

与模型对象关联的文件的额外方法

任何关联到一个模型对象(比如下面的Car.photo)的File都会有一些额外的方法:

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方法会在文件删除之后调用。