我在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脚本来访问文件夹中的所有文件,但我该如何继续?
由于
答案 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