GAEでアプリを作り始める。
満足にチュートリアルもやってないけど、アプリを作り始める。某P2Pの人にメタぼろにやられたサービスだけどこれを機にもう一度ゼロから作り始めてみる。その途中で、気付いた事、困った事などを綴る。
アプリ名から迷う
yamlにappidつけなきゃ行けないけど、中々良い名前が思いつかないので、以前の名前をそのまま使う「mrs(message rellay system)」
今回作るmrs ver.1は、テキストが入力されると適宜タグが付与されて、ユーザー毎に保存される。入力されるテキストをコアデータと呼ぶこととする。保存する際には、コアデータのテキストを解析し推奨タグを自動で推薦する。複数タグとコアデータのタイプ(今後の拡張対応)の機能も持つものとする。
現在のyamlの状況は以下の感じ
application: mrs version: 1 runtime: python api_version: 1 handlers: - url: /media static_dir: media - url: /api/.* script: api.py - url: /.* script: main.py
Django臭が漂うが、慣れているのでそのまま行く。staticファイルの扱いがいまいち判らない。
MVCにファイルを分けてみる。
チュートリアルは、MVCが分かれてなくて、テンプレートファイル(html)だけがお外に出てる。これだと後々めんどい事になりそうなので、MVCでファイルを分けて、さらにそれを呼ぶmain.pyという構成にしてみた。(ターミナルでファイル構造をプリントするコマンドの名前をど忘れ。)現状のファイルの状況は以下の感じ
# 設定yaml系 app.yaml index.yaml # コントローラー系py main.py api.py # モデル系py model.py # テンプレート main.html # 各種ディレクトリ media/ templates/ simplejson/
テンプレートファイルをtemplates/配下に置きたいけど、renderでの指定の仕方が分からずに、pyファイルと同階層に有るが、このままでは破綻する予感。さらに、外部モジュールのsimplejsonも使いたいので、同階層に配置したけどここで良いのかな?本当はext_mod/配下に置きたい。インポート出来ないのでここに置くことにした。>モジュール増えたらごちゃごちゃになるのやだなぁ・・
モデルからシコシコシコ
#!/usr/bin/env python # encoding: utf-8 """ model.py Created by atusi on 2008-04-13. Copyright (c) 2008 a2c.biz . All rights reserved. """ from google.appengine.api import users from google.appengine.ext import db class UserPrefs(db.Model): created_at = db.DateTimeProperty(auto_now_add = True) user = db.UserProperty(required = True) description = db.StringProperty() class Tag(db.Model): created_at = db.DateTimeProperty( auto_now_add = True ) body = db.StringProperty( required = True ) class Type(db.Model): body = db.StringProperty( required = True ) description = db.StringProperty() class Core(db.Model): created_at = db.DateTimeProperty( auto_now_add=True ) usr = db.ReferenceProperty(UserPrefs) body = db.StringProperty(required = True) types = db.CategoryProperty(Type) tags = db.CategoryProperty(Tag)
こんなので良いのか分からない(まだ、保存した事ない)けど、とりあえづエラーは全部取り払ったので動くであろう。ManyToManyの設定が分からない(っていうかない?)ので、CategoryPropertyとか言う便利そうなプロパティーにtypeとtagを食わせる事にした。