本文实例讲述了使用flask-cache缓存实现给flask提速的方法。分享给大家供大家参考,具体如下:
django里面可以很方便的应用缓存,那flask里面没准备这么周全怎么办?自己造*么?不用的,前人种树后人乘凉,我们有flask-cache,用起来和django里面一样方便哦!
1.安装
1
|
pip install flask - cache
|
2.配置
以我的zhihu项目(源码)为例:
在config.py里面,设置simple缓存类型,也可以用第三方的redis之类的,和django一样,装好redis改下设置就行
1
2
3
|
class config:
#省略
cache_type = 'simple'
|
在app/init.py里面
1
2
3
4
5
6
7
8
9
|
from flask_cache import cache
#缓存
cache = cache()
def create_app(config_name):
app = flask(__name__)
#此处省略若干字
cache.init_app(app)
#工厂函数返回创建的程序示例
return app
|
3.应用
在views.py里面
1
2
3
4
5
6
7
8
9
|
from .. import db, cache
from . import main
from ..decorators import admin_required, permission_required
@main .route( '/' , methods = [ 'get' , 'post' ])
@cache .cached(timeout = 300 ,key_prefix = 'index' ) #设置一个key_prefix来作为标记,然后,在内容更新的函数里面调用cache.delete('index')来删除缓存来保证用户访问到的内容是最新的
def index():
print ( "命令行里显示我就是调用这个函数了没走缓存,不显示我就是直接走缓存没吊用函数" )
# 省略
return render_template( 'index4.html' , form = form, posts = posts,show_followed = show_followed, pagination = pagination)
|
执行一遍,看看有没有print
输出,就可以看到缓存是否生效
4.清除缓存
第一种方法就是设置过期时间自动清除,可以在 flask 的config里面加上配置项:
cache_default_timeout 或者装饰器加参数timeout=50
。
第二种方法就是主动删除,比如@cache.cached(timeout=300,key_prefix='index')
设置好了缓存,删除的时候用cache.delete('index')
即可
1
2
3
4
5
6
|
@main .route( '/askquestion' , methods = [ 'get' , 'post' ])
@login_required
def askquestion():
#提问题写入数据库操作省略
cache.delete( 'index' ) #删除缓存
return render_template( 'askquestion.html' , form = form, posts = posts,show_followed = show_followed, pagination = pagination)
|
就像上面如果没设置key的话,默认的key_prefix='view/%s'
,这个%s
就是请求的路径request.path
,所以如果用@cache.cached(timeout=300)
建立缓存就可以用cache.delete('view//')
来清除缓存了,请求路径有的函数没有,最好设置key来搞
还有一种清除所有缓存的cache.clear()
希望本文所述对大家基于flask框架的python程序设计有所帮助。
原文链接:https://blog.csdn.net/u013205877/article/details/78013289