Django 静态文件的缓存控制

2023-04-11 00:00:00 缓存 静态 控制

在 Django 中,静态文件包括样式、Javascript、图片等等,这些文件是存放在静态目录中的,静态目录可以是项目中的某个目录,也可以是外部的某个目录,甚至可以是一个存在 CDN(内容分发网络)中的目录。

静态文件的缓存控制通常是通过设置 HTTP 响应头来实现的。HTTP 响应头中有一个叫做“Cache-Control”的属性,可以用来控制缓存。具体怎么设置呢?我们来看一个例子:

from django.http import HttpResponse

def my_view(request):
    response = HttpResponse()
    response['Cache-Control'] = 'max-age=31536000'
    response['Content-Type'] = 'text/css'
    response.write("""
        body {
           background-color: #fff;
        }
    """)
    return response

这个例子中,我们定义了一个名为 my_view 的视图函数,这个视图函数返回一个响应。我们通过在响应头中设置 Cache-Control 属性来控制缓存,这里设置了一个最大缓存时间为 1 年。我们还设置了响应的 Content-Type 为 text/css,表示这是一个 CSS 文件。

另外,Django 也提供了一个常用的静态文件处理中间件,可以方便地控制静态文件的缓存。我们只需要在 settings.py 中启用这个中间件,然后设置其缓存时间即可。下面是一个例子:

MIDDLEWARE = [
    # ...
    'django.middleware.cache.UpdateCacheMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.cache.FetchFromCacheMiddleware',
]

# 静态文件缓存时间
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.CachingStaticFilesStorage'

在这个例子中,我们启用了三个中间件,其中包含了一个叫做“UpdateCacheMiddleware”的中间件和一个叫做“FetchFromCacheMiddleware”的中间件。这两个中间件可以协同工作,实现静态文件的缓存控制。

同时,我们还在 settings.py 中设置了 STATICFILES_STORAGE 属性为 CachingStaticFilesStorage,这个属性表示我们使用 Django 提供的 CachingStaticFilesStorage 存储静态文件,并且设置了默认的缓存时间为 1 年。

总结一下,Django 静态文件的缓存控制可以通过设置 HTTP 响应头中的“Cache-Control”属性实现,也可以使用 Django 提供的静态文件处理中间件和存储,快速、方便地控制静态文件的缓存。

相关文章