File 物件

django.core.files 模組及其子模組包含 Django 中用於基本檔案處理的內建類別。

File 類別

class File(file_object, name=None)[原始碼]

File 類別是 Python 檔案物件 的精簡封裝,並加入了一些 Django 特有的功能。在內部,Django 在需要表示檔案時使用此類別。

File 物件具有以下屬性和方法

name

檔案的名稱,包含從 MEDIA_ROOT 的相對路徑。

size[原始碼]

檔案的大小,以位元組為單位。

file

此類別封裝的底層 檔案物件

在子類別中使用此屬性時請小心。

File 的某些子類別,包括 ContentFileFieldFile,可能會將此屬性替換為 Python 檔案物件 以外的物件。在這些情況下,此屬性本身可能是 File 子類別 (並且不一定是相同的子類別)。盡可能使用子類別本身的屬性和方法,而不是子類別的 file 屬性的屬性和方法。

mode

檔案的讀/寫模式。

open(mode=None, *args, **kwargs)[原始碼]

開啟或重新開啟檔案 (也會執行 File.seek(0))。mode 引數允許與 Python 內建 open() 相同的數值。*args**kwargs 會在 mode 之後傳遞給 Python 內建的 open()

重新開啟檔案時,mode 會覆寫檔案最初開啟時的任何模式;None 表示以原始模式重新開啟。

它可以做為上下文管理器使用,例如:with file.open() as f:

在 Django 5.0 中變更

新增了傳遞 *args**kwargs 的支援。

__iter__()[原始碼]

逐行迭代檔案。

chunks(chunk_size=None)[原始碼]

以給定大小的「區塊」迭代檔案。chunk_size 預設為 64 KB。

這對於非常大的檔案特別有用,因為它允許從磁碟串流檔案,並避免將整個檔案儲存在記憶體中。

multiple_chunks(chunk_size=None)[原始碼]

如果檔案大到需要多個區塊才能存取其所有內容,則在給定某些 chunk_size 的情況下,傳回 True

close()[原始碼]

關閉檔案。

除了列出的方法之外,File 還公開其 file 物件的以下屬性和方法:encodingfilenoflushisattynewlinesreadreadintoreadlinereadlinesseektelltruncatewritewritelinesreadable()writable()seekable()

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)

儲存一個新的檔案,使用提供的檔案名稱和內容。這不會取代現有的檔案,而是會建立一個新的檔案並更新物件以指向它。如果 saveTrue,則檔案儲存後,將會呼叫模型的 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)

從模型實例中移除檔案,並刪除底層的檔案。如果 saveTrue,則檔案刪除後,將會呼叫模型的 save() 方法。

回到頂部