今天为我的小站添加了一个计数器功能,实现起来也比较简单,不过由于Google App Engine的环境与一般的服务器端编程不同,在传统的ASP,PHP,JSP中,可以通过Application对象或者类似的对象时间全局变量,但Goolge App Engine不存在该类变量,放在缓存中也是不可行的,因为Google App Engine的缓存4-5小时就刷新一次,如果用缓存,过几个小时我小站的访问量就归零了,这怎么行呢?
各位看官大概都看明白了吧,其实想要用计数器,只需要在需要调用的地方放上一句count = getCounter()就OK了,我使用的是Google AppEngine自带的webapp模板,主页中的调用如下:
相应的模板为:
无意中尝试,居然发现Google提供的Data Index中居然可以提供类似于数据库编辑器的功能。贴图如下:
如图所示,使用该功能可以很容易的通过GQL修改数据,对计数器来说,清零是很easy的了。
我写的计数器是基于数据库的,在GAE里面就是BigTable了,相信大家也明白怎么回事了吧,不多说了,直接贴代码。
- #计数器部分
- class Counter(db.Model):
- count = db.IntegerProperty()
- def getCounter():
- q = db.GqlQuery("select * from Counter")
- counter = q.get()
- if not counter:
- counter = Counter()
- counter.count = 0
- counter.put()
- counter = q.get()
- #返回值
- result = counter.count + 1
- counter.count += 1
- counter.put()
- return(result)
- class MainPage(webapp.RequestHandler):
- def get(self):
- count = getCounter()
- template_values = {
- "count" : count
- }
- path = os.path.join(os.path.dirname(__file__), __INDEX__)
- self.response.out.write(template.render(path, template_values))
- <li class="strong"><!--计数器-->访问量:{{ count }}</li>
如图所示,使用该功能可以很容易的通过GQL修改数据,对计数器来说,清零是很easy的了。
点击看大图,不会贴图啊,请大家原谅 |