首先,最好建立正确的语言。Django和Python仅存在于服务器端。因此,他们操纵,保存或以其他方式使用的所有内容都必须先发送到服务器。如果要使用Django或Python管理照片,则用户必须首先将此照片上传到服务器。照片上传后,Django可以在存储文件之前自由进行更改。
如果您关注上传带宽,并且不想上传大文件,则必须在客户端上调整照片的大小并重新格式化。如果这是一个Web应用程序,则可以使用Javascript来完成,但是不能使用Python来完成,因为Python无法在像您这样的应用程序的客户端上运行。
如果您不关心带宽,那么您可以自由地让用户“上传”文件,但是在保存之前让Django调整大小并重新格式化。
您是正确的,您将要覆盖照片对象的保存功能。我建议使用库来处理大小调整和重新格式化,例如sorl。
from sorl.thumbnail import ImageField, get_thumbnailclass MyPhoto(models.Model): image = ImageField() def save(self, *args, **kwargs): if self.image: self.image = get_thumbnail(self.image, '500x600', quality=99, format='JPEG') super(MyPhoto, self).save(*args, **kwargs)
Sorl只是我有信心并熟悉的一个库,但是需要一些调整和配置。您可以检出Pillow或其他东西,而只需替换line
overing即可
self.image。
我在这里也发现了类似的问题。
编辑:上面
看到了您的评论回复的更新。另请注意,如果您的网络服务器正在处理Django,并且您的文件已保存到某些CDN,则此方法将起作用。在将图像上载到CDN 之前
,将在网络服务器上对其进行调整大小(假设您的配置符合我的假设)。
希望这可以帮助!



