More Related Content
Similar to Google App Engine Devfest 200810 External
Similar to Google App Engine Devfest 200810 External (20)
Google App Engine Devfest 200810 External
- 11. 1. app.yaml 配置文件 application: tag080808 version: 2 runtime: python api_version: 1 handlers: - url: /static static_dir: static - url: /admin.* script: admin.py login: admin - url: /.* script: main.py
- 12. from google.appengine.ext import db class Tweet (db. Model ): text = db. StringProperty () id = db. IntegerProperty () from_user = db. StringProperty () created_at = db. DateTimeProperty () iso_language_code = db. StringProperty () profile_image_url = db. LinkProperty () class User (db. Model ): name = db. StringProperty () screen_name = db. StringProperty () followers_count = db. IntegerProperty () count = db. IntegerProperty () id = db. IntegerProperty () description = db. StringProperty () ... 2. Data Model
- 13. 3. 后台抓取数据 class FetchHandler(webapp.RequestHandler): def get(self): url =( "http://search.twitter.com/search.json?q=%%23080808" "&page=%d" % page) response = urlfetch.fetch(url) if response.status_code == 200 : data = simplejson.loads(response.content) results = data[ "results" ] for result in results tweet = datamodel.Tweet( id = result[ "id" ], from_user = result[ "from_user" ], text = result[ "text" ], created_at = parse_time(result[ "created_at" ]) ) tweet.put() ......
- 14. class DefaultPage(webapp.RequestHandler): def get(self): top_users = datamodel.User.gql("ORDER BY count DESC LIMIT 20") template_values = {"top_users": to p_users} path = os.path.join(os.path.dirname(__file__), "templates/default.html") self.response.headers["Content-Type"] = "text/html" self.response.out.write(template.render(path, template_values)) 4 . 排行榜显示页面
- 15. class DefaultPage(webapp.RequestHandler): def get(self): top_users = datamodel.User.gql("ORDER BY count DESC LIMIT 20") template_values = { "top_users": top_users } path = os.path.join(os.path.dirname(__file__), "templates/default.html") self.response.headers["Content-Type"] = "text/html" self.response.out.write(template.render(path, template_values)) 4 . 排行榜显示页面
- 16. class DefaultPage(webapp.RequestHandler): def get(self): if memcache.get("top_users") is None: top_users = datamodel.User.gql("ORDER BY count DESC LIMIT 20") memcache.set("top_users", simplejson.dumps(top_users)) else: top_users = memcache.get("top_users") template_values = { "top_users": top_users } path = os.path.join(os.path.dirname(__file__), "templates/default.html") self.response.headers["Content-Type"] = "text/html" self.response.out.write(template.render(path, template_values)) 4 . 排行榜显示页面
- 17. <!DOCTYPE html> <html> ... <body> ... {% for user in top_users %} <dl> <dt><a href=“/tweeter/{{ user.user }}”>{{ user.name }}</a></dt> < dd >{{user.count }}</dd> </dl> {% endfor %} ... </body> 5. HTML 模板 default.html
- 19. 7. 部署! appcfg.py update application_folder
- 27. Google App Engine + OpenSocial TBD: Focus on 是男人系列 http://code.google.com/apis/opensocial/ articles/appengine-0.8.html