在 Django 中临时保存和清理图像对象

Tamporarily saving and sanitizing image objects in Django

我正在创建一个 Django 网站,用户 post 他们想要 sell/barter 使用过的物品的详细信息。

post购买商品时,倒数第二步是上传(最多 3 张)特价商品的照片。最后一步是提供个人详细信息(姓名、地址、手机)。此后,广告完成并进入 "pending approval" 队列。

我不想将照片保存到数据库中直到广告完成。因此,我想我会暂时保存对从表单中检索到的 UploadedFile 对象的引用,如下所示:

request.session["photo"] = form.cleaned_data.get('photo',None)

目前一切顺利,还是有问题?假设到目前为止一切都是正确的。

接下来,一旦广告完成,我会将图像保存到我的存储后端,并从 request.session 字典中 pop photo

但是如果用户在完成广告之前退出怎么办?我将如何处理创建了 request.session["photo"] 条目, 但用户从未完成广告 的情况? UploadedFile 对象保存在哪里?

基本上,我需要一种有效的方法来处理 'orphaned' request.session 图像条目和相关的 UploadedFile 对象。

使用会话的主要问题是它们不能处理大量数据,并且它们可能会由于编码、RAM 填满、框架的垃圾收集过程等原因而丢失信息.这真的取决于你如何存储会话对象,如果你已经解决了这个问题,请转到第二步。

第一步:你可能想做一个单独的模型来临时存储图像,存储日期和图像文件引用(通过一个ImageField),你可以告诉这个模型使用字段的 upload_to 参数将文件上传到媒体目录的临时位置。

第二步:设置一个管理命令,过滤特定日期的孤立模型(图像超过 10 分钟左右),然后将它们与图像一起删除(这很重要,因为删除数据库记录不会删除文件)。管理命令应该能够 运行 而无需用户干预。 Read more about management commands here.

第三步: 设置你机器的 Crontab 或任何你用来安排进程的东西,运行 根据你的需要每天或每小时管理命令.