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()方法。