DiskCache项目最初是为类似的问题(缓存图像)而创建的。它包含一些功能,可帮助您有效地缓存和提供图像。DiskCache 是一个 Apache2 许可的磁盘和文件支持的缓存库,用纯 Python 编写,与 Django 兼容。
diskcache.DjangoCache提供了一个与 Django 兼容的缓存接口和一些额外的特性。特别是,get
和set
方法允许读取和写入文件。一个例子:
from django.core.cache import cache
with open('filename.jpg', 'rb') as reader:
cache.set('filename.jpg', reader, read=True)
稍后您可以获得对该文件的引用:
reader = cache.get('filename.jpg', read=True)
如果您只是想要磁盘上文件的名称(在缓存中):
try:
with cache.get('filename.jpg', read=True) as reader:
filename = reader.name
except AttributeError:
filename = None
上面的代码从缓存中请求一个文件。如果没有这样的值,它将返回None
。None
将导致with
语句引发异常,因为它缺少__exit__
方法。在这种情况下,异常被捕获并filename
设置为None
。
使用文件名,您可以使用X-Accel-Redirect 之类的东西来告诉 Nginx 直接从磁盘提供文件。