Django和Google Cloud Storage-如何缓存图像

时间:2018-09-18 07:49:44

标签: django caching google-cloud-storage django-storage

我正在开发Django 2.1应用,并尝试通过Google Cloud Storage(GCS)提供媒体文件。

我创建了一个具有公共读取访问权限的存储桶,并安装了 django-storages 软件包。

我设法使集成工作正常,但是我不知道如何使浏览器缓存从GCS下载的图像。

现在,即使对于我已经访问过的那些页面,也可以下载图像。

这些是我在 settings.py 中的设置:

# GCS INTEGRATION
# ------------------------
DEFAULT_FILE_STORAGE = 'storages.backends.gcloud.GoogleCloudStorage'
GS_BUCKET_NAME = '<BUCKET>'
GS_DEFAULT_ACL = 'publicRead'
GS_CACHE_CONTROL = 'max-age=86400'

# MEDIA
# -------------------------
MEDIA_URL = 'https://storage.cloud.google.com/<BUCKET>/'
MEDIA_ROOT = 'https://storage.cloud.google.com/<BUCKET>/'

我还设置了一个指向 GCS服务帐户 json文件的环境变量

GOOGLE_APPLICATION_CREDENTIALS='<PATH-TO-JSON>'

在显示图像列表的模板中,我将以下代码放入循环中:

<div class="uk-width-1-4 uk-card-media-left uk-cover-container">
    <img data-src="{{object.resource.url}}" alt="" uk-cover uk-img>
</div>

由服务器呈现时,这段代码翻译如下:

<div class="uk-width-1-4 uk-card-media-left uk-cover-container">
    <img data-src="https://storage.cloud.google.com/<BUCKET>/<PATH-TO-FILE>" alt="" uk-cover="" uk-img="" class="uk-cover" src="https://storage.cloud.google.com/<BUCKET>/<PATH-TO-FILE>" style="width: 169px; height: 126px;">
</div>

我尝试用下面的mixin弄一些标题标签。

class CacheControlMixin(object):
    cache_timeout = 60*60

    def get_cache_timeout(self):
        return self.cache_timeout

    def dispatch(self, *args, **kwargs):
        response = super(CacheControlMixin, self).dispatch(*args, **kwargs)
        patch_response_headers(response, self.get_cache_timeout())
        patch_cache_control(response, public=True)
        return response

不用说,它没有用。

0 个答案:

没有答案