在Heroku上为Django静态文件添加expire头

Mic*_*ton 3 django caching heroku

我正在尝试优化我的网页,并且无法在我的静态文件上设置过期日期标题.

我正在运行django-1.5,python-2.7.3.

这是我在settings.pyso中的缓存设置:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': os.path.join(PROJECT_ROOT, 'cache/'),
    }
}

CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_SECONDS = 5 * 60
CACHE_MIDDLEWARE_KEY_PREFIX = ''

MIDDLEWARE_CLASSES = (
    'django.middleware.cache.UpdateCacheMiddleware',
    ...
    'django.middleware.cache.FetchFromCacheMiddleware',
)
Run Code Online (Sandbox Code Playgroud)

我在settings.py中的静态文件设置:

import os.path

PROJECT_DIR = os.path.dirname(os.path.abspath(__file__))
PROJECT_ROOT = os.path.abspath(os.path.join(PROJECT_DIR, '..'))

STATIC_ROOT = os.path.join(PROJECT_ROOT, 'staticfiles/')

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(PROJECT_DIR, 'static'),
)

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)
Run Code Online (Sandbox Code Playgroud)

我发现的最接近的建议是在这里,但我无法修改Heroku上的.htaccess文件.

任何帮助是极大的赞赏.谢谢!

Jac*_*edd 5

django staticfiles应用程序不提供对自定义标头的开箱即用支持.您必须将您自己的视图组合在一起以提供文件并将自定义标头添加到HttpResponse.

但是你不应该使用Django来提供静态文件.这是一个糟糕的主意.

  1. Django是单线程的,并且阻塞.因此,每当您为用户提供静态文件时,您实际上并没有提供任何其他服务(包括您的应用程序代码,这就是Django的用途).
  2. Django的静态视图文件不安全,不稳定.该文档明确表示不在生产中使用它.所以不要在生产中使用它.永远.