読者です 読者をやめる 読者になる 読者になる

私が歌川です

@utgwkk が書いている

GoogleAppEngine で リダイレクト

GoogleAppEngine でこういうコードを書いた。(実際はもっといろんなことを書いている)

# coding: utf-8

print "Location: http://cranalyzer.appspot.com/do"
print

で、実行してみる。
……あれ? リダイレクトされないぞ。ナンテコッタイ<(^o^)>

調べてみた。

リダイレクト、ヘッダー、ステータス コード - Google App Engine — Google Developers

どうやら、GoogleAppEngineのAPIをimportして使ってやればいいようだ。
で、完成したコードがこれ。(くどいようだが、実際はもっといろんなことを書いている)

# coding: utf-8
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

class MainPage(webapp.RequestHandler):
  def get(self):
    self.redirect('http://cranalyzer.appspot.com/do')

application = webapp.WSGIApplication([('/auth', MainPage)],debug=True)  # (★)

def main():
  run_wsgi_app(application)

if __name__ == "__main__":
  main()

なるほどね。
GoogleAppEngineはデフォルトで全てのURLリクエストを1つのスクリプトでさばく仕様になっているから、(★)の行の引数はもっと多くなるようだ。
そんなことは今回はどうでもいいから、'/auth'の部分をこのスクリプトを実行する相対パスにしてやればいいよ。

ちなみに、

self.response.headers['Content-type'] = 'text/html'

で、Content-typeが指定できるし、

self.response.headers['Set-cookie'] = 'rumia=rumia'

で、Cookieが作れるし、

self.request.get('code')

で、codeパラメータを取得できる。
ただ、今まで述べたのは全部、MainPageクラスのgetメソッド内に記述しないといけないから注意。