Hatena::Groupmoti

GoogleAppEngine

GoogleAppEngine

準備

SDKのインストール

ダウンロードして「/usr/local」に「google_appengine」という名前で展開する。

ここにおいておくと後々、Djangoを使うことになった場合に楽。

Windows and MacOS X users can just follow the standard installation procedure. 
Linux users can put the SDK in "/usr/local/google_appengine".
 If that is impossible you can also put the SDK into any folder that is in the system's PATH environment variable as long as it's called "google_appengine" (this works with any OS). 
GettingStarted - app-engine-patch - Getting started with app-engine-patch and what's different. - Project Hosting on Google Code

Run

% dev_appserver.py --address=192.168.0.5 --port 9000 .

セッション管理

gaeutilitiesCookie Sessionを使う。

サンプル

import sys
sys.path.append('appengine_utilities')
from appengine_utilities import sessions

mixiOpenID

  def person_name(self):                                                                                                    |
    ax_dict = self.ax_dict()                                                                                                |
    sreg_dict = self.sreg_dict()                                                                                            |
    if ax_dict.get('firstname', False) and \                                                                                |
        ax_dict.get('lastname', False):                                                                                     |
      firstname = ax_dict['firstname']                                                                                      |
      if isinstance(firstname, list):                                                                                       |
        firstname = firstname[0]                                                                                            |
      lastname = ax_dict['lastname']                                                                                        |
      if isinstance(lastname, list):                                                                                        |
        lastname = lastname[0]                                                                                              |
      return "%s %s" % (firstname, lastname)                                                                                |
    elif sreg_dict.get('fullname', False):                                                                                  |
      return sreg_dict['fullname']                                                                                          |
    elif sreg_dict.get('nickname', True):                                                                                   |
      return sreg_dict['nickname']                                                                                          |
    else:                                                                                                                   |
      return self.pretty_openid()  

openid-consumer

各種OpenIDを用いたアプリを作成するときに、サンプルとして公開されている「openid-consumer」を参考に作成することと思う。

だが、ダウンロード公開されているサンプルは、そのままでは動作しない。

修正

ダウンロードしたコードを展開し、app.cfgを編集してデプロイしようとするとIndexes関連のエラーが発生する。エラーがでるもののとりあずデプロイは完了するが正しく動作しない。

対処として、「index.yaml」の「kind:Login」に関する行、4行をコメントアウトし、再度デプロイする。

最低限コード

app.yaml

application: アプリケーション名
version: 1
runtime: python
api_version: 1

handlers:
- url: /.*
  script: main.py

main.py

import cgi,datetime,logging
from google.appengine.ext import db
from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
from google.appengine.ext.webapp.util import run_wsgi_app

logging.basicConfig(level=logging.DEBUG)

class Root(webapp.RequestHandler):
    def get(self):
        page = {
            'title':'Index'
            }
        t = template.Template(TMPL_INDEX)
        self.response.out.write(t.render(page))

class View(webapp.RequestHandler):
    def get(self):
        page = {
            'title':'View'
            }
        t = template.Template(TMPL_INDEX)
        self.response.out.write(t.render(page))

TMPL_INDEX="""
<html> <body>
    <h1> Title - {{title}}</h1>
    </body> </html>"""
# WSGI
application = webapp.WSGIApplication([
  (&#39;/&#39;, Root),
  (&#39;/view&#39;, View),
], debug=True)

def main():
  run_wsgi_app(application)

if __name__ == &#39;__main__&#39;:
  main()