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