Django 2.1.3 视图层 File 对象

文件上传 | 总目录 | 存储API


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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值