【问题标题】:Tamporarily saving and sanitizing image objects in Django在 Django 中临时保存和清理图像对象
【发布时间】:2017-06-18 00:01:09
【问题描述】:

我正在创建一个 Django 网站,用户可以在其中发布他们想要出售/易货的二手物品的详细信息。

发布商品时,最后第二步是上传(最多 3 张)特价商品的照片。最后一步是提供个人详细信息(姓名、地址、手机)。在此之后,广告完成并进入“待批准”队列。

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

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

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

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

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

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

【问题讨论】:

    标签: python django file temporary-files


    【解决方案1】:

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

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

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

    第三步:设置您机器的 Crontab 或任何您用来安排进程的工具,以根据您的需要每天或每小时运行管理命令。

    【讨论】:

    • 我设置了芹菜队列。我应该每天安排一个芹菜任务来照顾孤儿模型吗?
    • 二:刚看到这个老帖子:redrobotstudios.com/blog/2010/03/02/… 好像删除模型实例后,在Django中不需要手动删除底层文件?
    • 一个 Celery 队列就可以了,在这种情况下你甚至不需要发出管理命令,只需要一个处理模型的函数。此外,该帖子很旧,文件删除已在 Django 1.3 code.djangoproject.com/ticket/6456 中删除
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    • 2016-07-15
    • 2013-06-28
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多