ラベル GAE の投稿を表示しています。 すべての投稿を表示
ラベル GAE の投稿を表示しています。 すべての投稿を表示

2011年12月20日火曜日

テンプレートの継承

GAEのPythonでもテンプレートの継承ができます。
ASP.NETのマスターページみたいな感じです。

親テンプレート例
<html>
<body>
Content1<br />
{% block content1 %}{% endblock content1 %}<br />
<br />
Content2<br />
{% block content2 %}{% endblock content2 %}<br />
</body>
</html>


子テンプレート例
{% extends "base.tpl" %}
{% block content1 %}
content1: {{my_content1}}
{% endblock content1%}
{% block content2 %}
content2: {{my_content2}}
{% endblock content2%}


マスターページではマスターページで処理するコードも書けるのですが、
Pythonだと単なるテンプレートなので無理そう。
と、調べてみたところテンプレートタグやフィルタを作成してロードすれば
よいらしい。

Django v1.0 documentation
テンプレートタグやフィルタを自作する
http://djangoproject.jp/doc/ja/1.0/howto/custom-template-tags.html

ASP.NETと比べたらちょっと面倒。
というか、VisualStudioはインストールするだけでほぼ環境が揃って
開発の手間がかからないという点では本当に素晴らしいと思う。
ただ、動かすのにWindowsが必要なので、安価にネット上で構築するには
不向き。社内システムなんかだといいんだろうけど。

Python コード内の文字列で2バイト文字のとき

Paythonのコード内で、例えば変数に日本語を入れたときにエラーが出るときが
あります。
ググったところ、Python独特の事情とかなにやら難しいことが色々出てきました
が、、、とりあえず以下のコードを一番上に記述するとエラーが出なくなりました。

# coding: utf-8


とりあえず動けばいいので、これでよしと。。
おまじない的に入れておく。

2011年12月15日木曜日

認証のサンプル&コード掲載のテスト

コードの掲載テストを兼ねての認証のサンプルコードです。
webappフレームワークを使ってます。

テンプレートのHTML
<html>
<body>
<h1>Hello, {{first_name}}!</h1>
</body>
</html>


Pythonコード部分
import os
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext.webapp.util import login_required
from google.appengine.api import users

class MyPage(webapp.RequestHandler):
@login_required
def get(self):
template_values = {
#'first_name': 'Keisuke'
'first_name': users.GetCurrentUser().nickname()
}
path = os.path.join(os.path.dirname(__file__), 'index.html')
self.response.out.write(template.render(path, template_values))

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

def main():
run_wsgi_app(application)

if __name__ == "__main__":
main()


Google App Engineでの認証

Google App Engine + Pythonでの開発をはじめました。
昨日はデータストア関係をいろいろ調査して、基本的なことは
できるようになった。その辺は割愛。

で、次に認証関係を調査。
Googleアカウント認証が簡単に実装できるようです。
以下をdef get(self):の前に追加。

@login_required


これでGoogleアカウントにログインしてない場合、ログイン画面に
勝手にいきます。
ニックネームなどを取得する場合は以下のような感じで。

users.GetCurrentUser().nickname()


シンプルなサイトならこれで十分かも。