前の記事で、 Google AppEngineとは何か、それで何ができるかを見つけ、GAEの最もシンプルで最も原始的なアプリケーションであるユーザー認証の最小限のサポートを備えたhelloworldを作成しました。 Google AppEngineの機能を検証しながら、このアプリケーションを拡張してみましょう。
構造とアーキテクチャ
以前のアプリケーションは非常にシンプルであったため、アーキテクチャは必要ありませんでした。 ここで、より複雑で現実的なタスクを設定します。したがって、アプリケーションが成長し始めたときに何が起こるかを考える必要があります。 もちろん、私たちのタスクは発明されたものであり、そのためにアーキテクチャも必要ありませんが、例として、「科学に基づいて」すべてを実行しようとします。

これは、構造の観点からアプリケーションがどのように見えるかです。 青い長方形は、これらのページがすべての人にアクセス可能で表示可能であることを示しています。 黄色は、ユーザーセッションがアクティブな場合にコンテンツが変更される可能性があることを意味します。 オレンジは外界から完全に閉じられており、この前にログインした場合にのみアクセスできます。
上の画像の2つのページ、つまり「Googleでログイン」と「ログアウト」がGAEから提供されます。 私たちに必要なのは:
- いくつかの健全な情報を提供し、ログインを提案するホームページを書く
- すでにログインしているユーザー向けのホームページオプションを作成する
- ログインファクトを登録し、ユーザーをメインページにリダイレクトするログインハンドラーを作成する
- ユーザーがシステムにログインした回数と最後の時間を示す統計ページを作成します。
どこから始めますか? いつものように-最初から。
モデル
このアプリケーションでは、データストレージモデルは非常に単純ですが、GAE Datastoreの機能を説明するにはこれで十分だと思われます。 ユーザーに関する情報、つまりユーザーの識別子、最後の訪問の日時、および訪問回数を保存する必要があるとします。 GAE Datastore言語では、次のようになります。
#!/ usr / bin / env python
#エンコード:utf-8
「」
model.py
$ Id:model.py 4 2010-01-25 12:14:48Z sigizmund $
ローマンキリロフが2010-01-25に作成。
「」
インポート日時
google.appengine.ext import dbから
google.appengine.apiインポートユーザーから
クラスVisitor(db.Model):
'' '
Google DataStore永続モデルを使用する単純なオブジェクト
'' '
'' 'UserPropertyは、Googleの情報をカプセル化します
アプリケーションで使用可能なユーザーアカウント。 に設定されています
現在のユーザーをデフォルトのユーザーとして自動的に使用する
新しいオブジェクトが作成されるたびに '' '
user = db.UserProperty(必須= True、auto_current_user_add = True)
'' 'DateTimePropertyは、基礎となる標準のdatetime.datetimeを使用します
レコードが保存されるたびに今まで自動更新するように設定されています '' '
lastVisit = db.DateTimeProperty(auto_now = True)
'' 'デフォルト値0の非常に単純な整数プロパティ' ''
hits = db.IntegerProperty(デフォルト= 0)
http://code.google.com/p/habr-gae-helloworld/source/browse/trunk/model.py誰が何であるかを把握します。
Visitor
クラスは、データストアへのインターフェースである標準のGAEクラス
google.appengine.ext.db.Model
から継承されます。このテクノロジーを使用して永続化するすべてのクラスは、このクラスを拡張する必要があります。
Visitor
クラスには、
user
、
lastVisit
および
hits
3つのデータフィールドがあります。 後者から始めて詳細に検討します。
クラスの操作は非常に簡単です。通常のオブジェクトとして作成し、設定するフィールド(この場合は
hits
)を設定して、データストアに保存します。
u =訪問者()
u.hits = 17
u.put()
これは、オブジェクトを保存し、後でエンティティ
Visitor
一部として使用できるようにするのに十分です。 特定のフィールドの値でオブジェクトを検索する方法については、記事の次の部分で少し後で説明します。 私たちのテストアプリケーションのソースは、
ここで徐々に避難所を見つけており、あなたが書いているようにレイアウトされます。
これは、AppEngineに関する一連の記事の第2部です。 次のパートでは、実際にコントローラーとプレゼンテーションを作成して、おいしいところを説明します。 コメント、提案、質問を待っています。
PSは、Python用の優れた構文ハイライターをアドバイスしてください。Habrでうまく機能しますか? 私がいつも使っていた
tohtml.comは、パーサーと互換性のないものを生成します。
更新:第三部
-habrahabr.ru/blogs/gae/81933