When it’s ready.

出来るまで出来ない

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を食わせる事にした。