Django 2.1.3 視圖層 File 對象

文件上傳 | 總目錄


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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章