Django 1.8缓存破坏+亚马逊S3

Jes*_*oto 8 python django caching amazon-s3

我一直在做一些研究,我找到了解释如何使用Django(1.8)缓存清除的文章,但他们没有解释我的情况.

我在settings.py中使用S3(并且它可以工作)以下设置:

STATICFILES_STORAGE= 'pms.s3utils.StaticRootS3BotoStorage'
Run Code Online (Sandbox Code Playgroud)

为了使用缓存清理文档说我必须设置:STATICFILES_STORAGE='django.contrib.staticfiles.storage.ManifestStaticFilesStorage'

我不知道使用什么设置来同时使用S3和缓存清除.

谢谢!

Jes*_*oto 12

所以我终于找到了解决方法.

为了能够将我的文件上传到我的S3存储桶中的2个不同的文件夹(静态和上传),我在我的settings.py文件中有这个:

STATICFILES_STORAGE = 'myapp.s3utils.StaticRootS3BotoStorage'
DEFAULT_FILE_STORAGE = 'myapp.s3utils.MediaRootS3BotoStorage'
Run Code Online (Sandbox Code Playgroud)

这在myapp.s3utils.py文件中:

from storages.backends.s3boto import S3BotoStorage

StaticRootS3BotoStorage = lambda: S3BotoStorage(location='static')
MediaRootS3BotoStorage  = lambda: S3BotoStorage(location='uploads')
Run Code Online (Sandbox Code Playgroud)

但我无法使用Django的缓存破坏.解决方案是将我的myapp.s3utils.py文件更改为:

from storages.backends.s3boto import S3BotoStorage

from django.contrib.staticfiles.storage import ManifestFilesMixin

class CustomS3Storage(ManifestFilesMixin, S3BotoStorage):
    pass

StaticRootS3BotoStorage = lambda: CustomS3Storage(location='static')
MediaRootS3BotoStorage  = lambda: S3BotoStorage(location='uploads')
Run Code Online (Sandbox Code Playgroud)

基本上它添加了ManiFestfilesMixin,它允许你使用缓存清除.

作为旁注,您可以看到我只使用缓存清除静态文件,但不是上传文件.这就是MediaRootS3BotoStorage调用S3BotoStorage类而不是CustomS3Storage的原因.我是这样做的,因为上传文件没有存储在我的服务器中(静态文件是),它们直接存储在S3存储桶中,所以当我运行collectstatic时它们不在我的服务器上,所以我没有将哈希添加到名称中.