如果没有用,Django会按计划删除上传的文件

时间:2011-09-23 09:11:07

标签: django bash file-upload

我在Django中有一个模型,可以将上传的照片属性保留为

class Photo(models.Model):

file = models.FileField(storage=FileSystemStorage(location=settings.MEDIA_ROOT), upload_to='uploads')
header = models.CharField(null=True,max_length=200)
added_by = models.CharField(null=True,max_length=500)
isVerified = models.BooleanField(blank=False)

此模型是通过表单链创建的,由于某些原因,有时可能会上传照片但由于链未完成,因此无法使用。

我想编写一个脚本来删除所有这些文件(isVerified = False)并在某个时间表中运行它。

我该如何编写该脚本? 我可以编写一个Bash脚本来访问文件夹中的所有文件,但我该如何继续?

由于

2 个答案:

答案 0 :(得分:0)

我会编写一个python脚本,使用Django命中数据库并获取未经验证的所有内容。

#!/usr/bin/env python

import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
    # Assuming your settings are in the same directory, called settings.py.  
    # This is needed to tell django where to find the database
    # use "module syntax" - dots not slashes

from django.conf import settings
from models import Photo # Make sure this is after the os.environ call
for photo in Photo.objects.filter(isVerified = false):
    full_path = os.path.join(settings.MEDIA_ROOT, photo.file.path)
    os.unlink(full_path)

请记住,我没有测试过这个:)

一旦你成功测试了它,你就可以把它放在你的crontab中,每说6个小时。保存为delete_unverified_files.py,然后运行crontab -e。在显示的文件中,输入:

0 */6 * * * python /path/to/delete_unverified_files.py

如果您使用google crontab,如果您不熟悉,可以找到很多如何编写的例子。

答案 1 :(得分:0)

这里最好的方法是使用自定义django-admin命令: https://docs.djangoproject.com/en/1.3/howto/custom-management-commands/

所以crontab会像这样执行smth: ... manage.py delete_unverified_files