我正在学习如何上传图片的教程,我完全不知道这个人用来为提交的图片生成缩略图的方法
这是他的代码的删减部分:
import os.path
from PIL import Image as PImage
from settings import MEDIA_ROOT
from tempfile import *
class Image(models.Model):
image = models.FileField(upload_to="images/")
thumbnail = models.ImageField(upload_to="images/", blank=True, null=True)
def save(self, *args, **kwargs):
super(Image, self).save(*args, **kwargs)
im = PImage.open(pjoin(MEDIA_ROOT, self.image.name))
fn, ext = os.path.splitext(self.image.name)
im.thumbnail((128,128), PImage.ANTIALIAS)
thumb_fn = fn + "-thumb" + ext
tf = NamedTemporaryFile()
im.save(tf.name, "JPEG")
self.thumbnail.save(thumb_fn, File(open(tf.name)), save=False)
tf.close()
super(Image, self).save(*args, ** kwargs)
所以我对此的具体问题是:
- 他使用 FileField 作为图像,使用 ImageField 作为缩略图的任何原因?
- 据我了解,
super(Image, self).save(*args, **kwargs)
保存模型。但他为什么最后又叫它? - 然后我不太了解角色扮演以及被调用
NamedTemporaryFile()
时究竟会发生什么self.thumbnail.save(thumb_fn, File(open(tf.name)), save=False)