スポンサーリンク

このドキュメントの内容は、以下の通りです。

Google App Engineでは、テンプレートが利用できます。
ソースコードの中にHTMLを埋め込むとメンテナンスしづらくなります。
そういう場合には、テンプレートシステムを利用するとHTMLを別のファイルに分けることができ、特別なシンタックスでアプリケーションで作成したデータを埋め込むことができます。Pythonにはテンプレートシステムが色々あります。webappモジュールには、Djangoテンプレートエンジンが含まれているため、すぐに利用することが可能です。SDKにも含まれています。

テンプレートを使う


テンプレートを使うには、下記の宣言をします。
import os
from google.appengine.ext.webapp import template

ディレクトリを作成する


ディレクトリ名は適当でいいです。
mkdir hellowebapp

app.yaml


先ほど作成した hellowebapp のディレクトリに下記のファイルを作成します。

app.yaml
application: hellowebapp
version: 1
runtime: python
api_version: 1

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

hellowebapp.py


メインになるプログラムを記述します。
先ほど作成した hellowebapp のディレクトリに下記のファイルを作成します。

hellowebapp.py

このプログラムでは、未ログインユーザにはログインを求め、ログインユーザに対してログイン名を画面に表示するだけのプログラムです。
import os
from google.appengine.ext.webapp import template
from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

class MainPage(webapp.RequestHandler):
	def get(self):
		user = users.get_current_user();
		if user:
			username = user.nickname()
			login_url = users.create_logout_url(self.request.uri)
			login_txt = 'Logout'
		else:
			username = 'Guest'
			login_url = users.create_login_url(self.request.uri)
			login_txt = 'Login'

		template_values = {
				'username': username,
				'login_url': login_url,
				'login_txt': login_txt,
				}
		path = os.path.join(os.path.dirname(__file__), 'index.html')
		self.response.out.write(template.render(path, template_values))

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

def main():
	run_wsgi_app(application)

if __name__ == "__main__":
	main()

プログラムに関する説明。

index.html(後述)というテンプレートを用意します。
辞書型の template_values に変数名と値のペアを設定します。
template.render()でテンプレートにtemplate_valuesが渡され、テンプレート(ここではindex.html)の変数名が展開され、変数名に対応する値に置き換わります。

未ログイン状態の場合、ログイン用URLが表示され、Guestと表示されます。
ログイン状態の場合、ログアウト用URLが表示され、nickname(表示名)が表示されます。

index.html

などの特別なシンタックスの部分が template_values の値が割り当てられて表示されます。

<html>
	<head>
		<title>App Engine</title>
	</head>
	<body>
		<a href="{{ login_url }}">{{ login_txt }}</a><br>
		Hello {{ username }}
	</body>
</html>

動かし方


hellowebappのディレクトリがカレントディレクトリなら。
sudo /usr/local/share/google-appengine/dev_appserver.py .

カレントディレクトリに hellowebappのディレクトリがあるなら。
sudo /usr/local/share/google-appengine/dev_appserver.py hellowebapp

hellowebappのディレクトリを指定して起動するなら。
sudo /usr/local/share/google-appengine/dev_appserver.py /path/to/hellowebapp

開発環境(SDK)で実行したときにログインしていない場合は、 localhost の _ah/login にリダイレクトされ、Eメールアドレスを求められる。
Google App Engineで実行したときにログインしていない場合は、Googleのログインページへリダイレクトされ、通常のログインを要求される。


アクセス


http://localhost:8080 にブラウザでアクセスしてください。
localhost 以外のアクセスは拒絶されます。

未ログインの場合は、ログインURLとGuest が表示されれば、成功です。
ログイン状態の場合は、ログアウトURLと表示名 が表示されれば、成功です。

終了の仕方


C-c

参考




Google App Engine 関連記事


[2009-02-22-1] FreeBSDにGoogle App Engine SDKをインストールする
[2009-02-23-1] Google App EngineでHello worldを書く
[2009-02-28-1] Google App Engine 有料サービス開始
[2009-03-02-1] Google App Engine Pythonのアプリケーションをアップロードする
[2009-03-07-1] Google App Engine Googleアカウント認証を利用する
参照しているページ (サイト内): [2009-03-07-1]

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

スポンサーリンク
 

過去ログ

2020 : 01 02 03 04 05 06 07 08 09 10 11 12
2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー