关于Flask浏览器缓存问题
最近写大作业需要用到Flask框架,但使用时发现一个致命问题。
起因是我在修改css文件后,重新运行项目,发现前端并没有更改。
原因是在编写前端时,通常会把图片、css、js等文件放在static文件夹下。但这同时也导致了一个问题:在浏览器加载网页时,会留有一份缓存。当重新运行项目,浏览器并没有向后台请求新的样式文件,而是直接加载的缓存。
正常人最初的想法肯定都是把浏览器缓存关掉。但不知为何,我的小chrome不吃这套(摊手。而且把浏览器缓存关掉也不是一个明智的选择。
之后浏览了不少的博客,大多数给出的方法是更改flask的缓存机制,flask配置文件中默认的缓存有效时间是12h。然而直接更改flask设置并不是一个合适的方法。有的博客给出了在项目中的python中的文件中进行此项设置的更改。然而我的小项目也不吃这套(再次摊手。
无奈之下,只能改用最笨的方法:既然浏览器不对后台进行请求,那就让他强行请求就好了。
核心想法是动态更改html中的url,每次请求的url不一样,浏览器便不会加载缓存
于是,在html文件中引入css时,可以采用这种方式:
1 | <link rel="stylesheet" href="{{ url_for('static', filename='assets/css/main.css', v=0.0129)}}" >; |
每次更改样式文件后,手动更改一下或动态生成版本号,这样浏览器发现版本号对不上后就会重新请求一份。
也可采用时间戳的方式。时间戳的好处在于能够避免重复。
例如我加载本地的图片时,可采用以下方式引入时间戳:
1 | path = "static/wordcloud.png?timestamp="+new Date().getTime(); //在图片路径后加入时间戳 |
我承认这个方法很笨,但真的立竿见影
果然,笨方法永远是最好用的。
关于Flask浏览器缓存问题