【问题标题】:How to disable Starlette static files caching?如何禁用 Starlette 静态文件缓存?
【发布时间】:2021-05-11 13:45:33
【问题描述】:

我在 Python 应用程序中使用 Starlette 框架,并按照文档要求配置了静态文件:

routes = [
...
Mount('/static', app=StaticFiles(directory='static'), name="static"),]

问题是 Starlette 正在对这些静态文件执行自动缓存,文档中没有关于如何禁用缓存的信息。

我尝试了 asgi-caches,但我很快看到它配置了缓存,但现在似乎无法禁用缓存。

文档中唯一提到禁用缓存告诉您它是一个“TODO”并且是处理视图而不是静态文件的装饰器。

有谁知道如何配置框架以保证 Starlette 不缓存我的静态文件?

【问题讨论】:

    标签: python-3.x starlette


    【解决方案1】:

    似乎没有官方配置可以做到这一点。

    但是你可以通过覆盖starlette.staticfiles.StaticFiles的方法is_not_modified来做到这一点。

    例子:

    from starlette.staticfiles import StaticFiles
    
    class MyStatics(StaticFiles):
    
        def is_not_modified(
                self, response_headers: Headers, request_headers: Headers
        ) -> bool:
            # your own cache rules goes here...
            return False
    
    ...
    
    Mount('/static', app=MyStatics(directory='static'), name="static"),]
    

    【讨论】: