所以我已经阅读了Django文档中关于缓存的内容,并了解到我可以按视图缓存数据,这正是我想要做的。我有一个类似的URL:www.mysite.com/related_images/{image_id}。其计算所选择的{image_id}的相关图像,并将它们保存到磁盘。问题是,我不希望这些图像永远留在那里,但现在我的视图将它们保存到磁盘上,而不进行任何缓存,我如何确保通过缓存视图一段时间,当缓存到期时,视图创建的任何文件都会被删除?。
或者,如果你对我的问题有更好的解决方案,我愿意接受你的想法。有没有一种方法可以将缓存中的图像注入到模板中,而无需将其保存在磁盘上并显式地为html提供路径?
这是视图的简化版本:
def related_image(request, pk):
original = get_object_or_404(Image, pk=pk)
images = original.get_previous_views()
for im in images:
path = '/some/dir/'+str(im.id)+'.jpg'
calculated_image = calculate(im,original)
file = open(path)
file.write(calculated_image)
im.file_path = path
return render_to_response('app/related_image.html', {'images': images})
感谢:)
一种解决方案是查看文件元数据的最后修改日期,并将其与设置的到期期限进行比较。
例如:
import os
expiration_seconds = 3600
last_modified_time = os.path.getmtime(file_path) # i.e. 1223995325.0
# that returns a float with the time of last modification since epoch,
# so there's some logic to do to determine time passed since then.
if time_since_last_modified >= expiration_seconds:
# delete the file
os.remove(file_path)
# then do your logic to get the file again