首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >瓶子--将SimpleTemplate的输出重定向到静态文件

瓶子--将SimpleTemplate的输出重定向到静态文件
EN

Stack Overflow用户
提问于 2019-04-06 23:31:25
回答 1查看 96关注 0票数 0

我想为我一直在工作的瓶子网站实现一个缓存系统。这样做的想法是,两个路径需要更长的渲染时间,所以,如果sqlite表在html文件生成后没有更新,我将返回它,如果有,我将从数据库中检索行,并将其保存到文件中并返回。

可能有人已经这样做了,所以任何将'.tpl‘模板的输出重定向到'.html’文件的技巧都将不胜感激。

我看过一些通用的缓存库,但它们似乎是通过以特定的时间间隔刷新缓存来工作的,而我希望在数据库发生变化时进行刷新。

谢谢。

编辑:我使用Apache作为反向代理,使用cheroot作为应用服务器。

EN

回答 1

Stack Overflow用户

发布于 2019-04-10 01:00:47

首先,您需要一个缓存对象。字典是一个很好的选择。

代码语言:javascript
复制
cachetpl = {}
lastupdated = time.time()
cache = Cache()

然后创建一个类来处理字典中的内容:

代码语言:javascript
复制
class Cache(object):
    def __init__(self):
        global lastupdated
        self.lastupdated = lastupdated
        global cachetpl
        self.cachetpl = cachetpl

    def keys(self):
        return self.cachetpl.keys()

    def lastupdate(self):
        return self.lastupdate

    def meta(self, clienthash, zipcode=None):
        return self.cachetpl[clienthash]

然后,您需要设置一个脉冲来检查更改,可能是检查SQL存储的最新更新列。

代码语言:javascript
复制
@staticmethod
def update():
    global cachetpl
    global lastupdated
    if not cachetpl:
        return None, None
    PSQL = ''' SELECT key, meta FROM schema.table WHERE lastupdated >= %s '''        
    changes = db.fetchall(PSQL, lastupdated)
    if changes:
        numchange = len(changes)
        for x in changes:
            cachetpl[x[0]] = x[1]
        lastupdated = time.time()
        return len(cachetpl), numchange
    else:
        lastupdated = nz.now()
        return None, None

如何设置此脉冲取决于您。我使用一个名为scheduler的python库,并在我的异步应用程序中使用gevent。效果很棒。

现在,您只需将您的类命名为Cache(),并向其提供所需的任何数据。我的建议不是返回模板,而是先将其保存在数据库中,然后再返回。让对路由的调用在呈现之前检查缓存的版本。然后,您可以修改更新,以便在数据更改时在后台呈现页面,因此对缓存的下一次调用是新数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55550618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档