google appengine中的计数器

来源:互联网 发布:程序员的发展前景 编辑:程序博客网 时间:2024/05/21 19:35
  今天为我的小站添加了一个计数器功能,实现起来也比较简单,不过由于Google App Engine的环境与一般的服务器端编程不同,在传统的ASP,PHP,JSP中,可以通过Application对象或者类似的对象时间全局变量,但Goolge App Engine不存在该类变量,放在缓存中也是不可行的,因为Google App Engine的缓存4-5小时就刷新一次,如果用缓存,过几个小时我小站的访问量就归零了,这怎么行呢?
  我写的计数器是基于数据库的,在GAE里面就是BigTable了,相信大家也明白怎么回事了吧,不多说了,直接贴代码。
  1. #计数器部分
  2. class Counter(db.Model):
  3.     count = db.IntegerProperty()

  4. def getCounter():
  5.     q = db.GqlQuery("select * from Counter")
  6.     counter = q.get()
  7.     
  8.     if not counter:
  9.         counter = Counter()
  10.         counter.count = 0
  11.         counter.put()
  12.         counter = q.get()
  13.     
  14.     #返回值
  15.     result = counter.count + 1
  16.     counter.count += 1
  17.     counter.put()
  18.     return(result)
   各位看官大概都看明白了吧,其实想要用计数器,只需要在需要调用的地方放上一句count = getCounter()就OK了,我使用的是Google AppEngine自带的webapp模板,主页中的调用如下:
  1. class MainPage(webapp.RequestHandler):
  2.     def get(self):
  3.         
  4.         count = getCounter()
  5.         
  6.         template_values = {
  7.             "count" : count
  8.         }
  9.         
  10.         path = os.path.join(os.path.dirname(__file__), __INDEX__)
  11.         self.response.out.write(template.render(path, template_values))
   相应的模板为:
  1. <li class="strong"><!--计数器-->访问量:{{ count }}</li>
   无意中尝试,居然发现Google提供的Data Index中居然可以提供类似于数据库编辑器的功能。贴图如下:

   如图所示,使用该功能可以很容易的通过GQL修改数据,对计数器来说,清零是很easy的了。点击看大图,不会贴图啊,请大家原谅