我正在使用 python GAE 和 jinja2 模板构建博客。博客有两栏的典型布局,主要内容是大一栏,侧面板内容是小一栏。
现在我正在考虑将用户最近发表的 5 篇帖子添加到侧面板,这与 Google Blogger 的“我的博客列表”非常相似。但我担心的是,当我必须将此列表传递给不同的处理程序时用户转到其他页面。例如,如果用户在主博客页面,侧面板将显示 5 个最近的帖子。但如果用户转到另一个说,添加新帖子,则此页面仍显示 5最近的帖子。这是我当前执行此操作的方法的伪代码。
MainPage_handler(self):
self.render('main.html', recent_posts = function_to_get_recent_posts())
AddNewPost_handler(self):
self.render('add_post.html', recent_posts = function_to_get_recent_posts())
函数如下所示:
class Blog(db.Model):
owner_id = db.StringProperty()
......
created = db.DateTimeProperty(auto_now_add = True)
@classmethod
def recent_post(cls, limit, onwer_name):
blogs = cls.all().filter('owner_id = ', onwer_name).order('-created').fetch(limit)
return blogs;
有没有更好的方法来实现这一点?
请您参考如下方法:
由于您需要 5 个最新的帖子,我建议在重定向或呈现新页面时“重新计算”这些内容是有意义的。在这种假设下,我不得不说你的做法似乎是在做需要做的事情,除非它导致页面加载时间或其他问题出现问题,否则就不要管它了。也许如果您不想每次都访问数据库,您可以使用 GAE 内置的 memcached 选项缓存这些最近的帖子,但我想这可能已经是您的函数返回的内容。
我从您的函数中看到,您每次调用该函数时似乎都在直接访问数据库。每次添加帖子时缓存 5 个最近的帖子怎么样?这样,您只会在有人添加帖子(在侧面板帖子的上下文中)时访问数据库,而不是每次重定向等时。
查看内存缓存 here
但是,如果您使用的是 GAE ndb,那么它会自动管理缓存。
