File 对象 — Django 文档
File 对象
django.core.files 模块及其子模块包含用于在 Django 中进行基本文件处理的内置类。
File 类
- class File(file_object, name=None)
File 类是 Python file 对象 的瘦包装器,其中包含一些 Django 特定的附加功能。 在内部,Django 在需要表示文件时使用这个类。
File 对象具有以下属性和方法:
- name
文件名,包括来自 :setting:`MEDIA_ROOT` 的相对路径。
- size
文件的大小(以字节为单位)。
- file
此类包装的底层 文件对象 。
小心子类中的这个属性。
File 的一些子类,包括 ContentFile 和 FieldFile,可以用 Python file 对象 以外的对象替换这个属性。 在这些情况下,此属性本身可能是 File 子类(不一定是相同的子类)。 尽可能使用子类本身的属性和方法,而不是子类的
file
属性的属性和方法。
- mode
文件的读/写模式。
- open(mode=None)
打开或重新打开文件(也可以执行
File.seek(0)
)。mode
参数允许与 Python 的内置python:open()
相同的值。重新打开文件时,
mode
将覆盖文件最初打开时使用的任何模式;None
表示以原来的模式重新打开。它可以用作上下文管理器,例如
with file.open() as f:
。
- __iter__()
迭代文件,一次产生一行。
- chunks(chunk_size=None)
迭代文件产生给定大小的“块”。
chunk_size
默认为 64 KB。这对于非常大的文件特别有用,因为它允许从磁盘流式传输它们并避免将整个文件存储在内存中。
- multiple_chunks(chunk_size=None)
如果文件大到需要多个块来访问其所有内容,则返回
True
给出一些chunk_size
。
- close()
关闭文件。
除了列出的方法,File 还公开了其
file
对象的以下属性和方法:encoding
、fileno
、flush
,isatty
,newlines
,read
,readinto
,readline
,readlines
,tell
、truncate
、write
、writelines
、readable()
、writable()
、
ContentFile 类
- class ContentFile(content, name=None)
ContentFile
类继承自 File,但与 File 不同的是,它对字符串内容(也支持字节)而不是实际文件进行操作。 例如:from django.core.files.base import ContentFile f1 = ContentFile("esta frase está en español") f2 = ContentFile(b"these are bytes")
ImageFile 类
- class ImageFile(file_object, name=None)
Django 提供了一个专门用于图像的内置类。 django.core.files.images.ImageFile继承了File的所有属性和方法,另外提供了以下内容:
- width
图像的宽度(以像素为单位)。
- height
图像的高度(以像素为单位)。
附加到对象的文件的附加方法
任何与对象关联的 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()
方法。