2010年5月アーカイブ

スタートガイドのプログラムを少しいじってみる。

なんとなく電話のメモを取るような感じにしてみる。(ほぼ掲示板だけど・・・。)

app.yaml

application: memo
version: 1
runtime: python
api_version: 1

handlers:
- url: .*
  script: main.py

main.py

import cgi

from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext import db
import os
from google.appengine.ext.webapp import template

class Greeting(db.Model):
  author = db.UserProperty()
  content = db.StringProperty(multiline=True)
  company_name = db.StringProperty()
  client_name = db.StringProperty()
  rank = db.StringProperty()
  date = db.DateTimeProperty(auto_now_add=True)


class MainPage(webapp.RequestHandler):
  def get(self):
    greetings_query = Greeting.all().order('-date')
    greetings = greetings_query.fetch(10)

    if users.get_current_user():
      url = users.create_logout_url(self.request.uri)
      url_linktext = 'Logout'
    else:
      url = users.create_login_url(self.request.uri)
      url_linktext = 'Login'

    template_values = {
      'greetings': greetings,
      'url': url,
      'url_linktext': url_linktext,
      }

    path = os.path.join(os.path.dirname(__file__), 'index.html')
    self.response.out.write(template.render(path, template_values))

class Guestbook(webapp.RequestHandler):
  def post(self):
    greeting = Greeting()

    if users.get_current_user():
      greeting.author = users.get_current_user()

    greeting.content = self.request.get('content')
    greeting.company_name = self.request.get('company_name')
    greeting.client_name = self.request.get('client_name')
    greeting.rank = self.request.get('rank')
    greeting.put()
    self.redirect('/')

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

def main():
  run_wsgi_app(application)

if __name__ == "__main__":
  main()
index.html


<html>
  <body>
    {% for greeting in greetings %}
      {% if greeting.author %}
        <b>{{ greeting.author.nickname }}</b> wrote:
      {% else %}
       An anonymous person wrote:
      {% endif %}
      <p>会社:{{ greeting.company_name|escape }} | 担当者:{{ greeting.client_name|escape }} | 手ごたえ:{{ greeting.rank|escape }}%</p>
      <blockquote>{{ greeting.content|escape }}</blockquote>
    {% endfor %}
<hr />
    <form action="/sign" method="post">
      <div>会社:<input type="text" name="company_name">  担当者:<input type="text" name="client_name"></div>
      <div>手ごたえ:<select name="rank">
      	<option value="0" />0
      	<option value="10" />10
      	<option value="20" />20
      	<option value="30" />30
      	<option value="40" />40
      	<option value="50" />50
      	<option value="60" />60
      	<option value="70" />70
      	<option value="80" />80
      	<option value="90" />90
      	<option value="100" />100
      </select>%</div>
      <div>メモ:<br /><textarea name="content" rows="3" cols="60"></textarea></div>
      <div><input type="submit" value="Sign Guestbook"></div>
    </form>

    <a href="{{ url }}">{{ url_linktext }}</a>

  </body>
</html>


sample_1.jpg

何とか動いた。
main.pyの「Greeting」class(サンプルのまま名前変えてない・・・。)でモデルの定義をしてる。
どのデータがどのProperty クラスなのかわからなくなったら型とプロパティ クラスを参照。

ほんの少しつかめてきた。

Google App Engine 実践リファレンス
清野 克行
技術評論社
売り上げランキング: 47717
おすすめ度の平均: 4.0
4 これから始めたい方に・・・JavaでもPythonでも
GAE Pythonの環境ができたので、Googleの公式にあるスタートガイドどおりにやってみる。

スタート ガイド: Python

  1. 概要
  2. 開発環境
  3. Hello, World!
  4. webapp フレームワークの使用
  5. ユーザー サービスの使用
  6. webapp を使ったフォームの操作
  7. データストアの使用
  8. テンプレートの使用
  9. 静的ファイルの使用
  10. アプリケーションのアップロード

基本的には書いてあるとおりにやれば問題なく動いた。
でもWindows7 上で実験してる際にデータストアの使用のところで躓いた。
ローカルで動かそうとしたときにデータストアにアクセスできないようなエラーが出た。
そもそもデータストアの場所がローカルのどこにあるのかわからなかったので
ググってみたら以下のエントリを発見

App EngineでPythonを覚えるブログ

同じようにdev_appserver.pyを引数無しで実行したら無事にDBの保存先が判明。
エラーはこのファイルに対してアクセスできないから発生しているような気がする・・・。
そもそもWindows7ではユーザーアカウント制御があるからそれが原因っぽい。
なので対象となるフォルダを他のユーザでも操作できるように変更したら動いた!

以下は開発するときに利用するツールとか。

icon.jpg
GAE-PythonのSDKをインストールすると画面上に左の
ようなショートカットが表示される。




上記のショートカットをクリックすると新たに画面が立ち上がる。
sample_launch.jpg
この画面でたいていのことができる。
新しいアプリの作成、開発サーバでの実行、プログラムを編集、デプロイなど。
Eclipseよりは貧弱だけどコマンドプロンプトでちまちまやるよりは断然やり易い。
デフォルトのエディタだと非常にやり辛いのでとりあえずサクラエディタとかにしてみた。
そのうちmeadowかvimにすると思う。。
プログラムも今はwindows環境においてるけど、VMのCentOSにsambaでつないで
そっちにプログラムを置けばそっち側でgitでプログラムの管理できるのかも。
今のところLinux環境におく意味はそんなに無いか・・・。

開発環境でデータストアを利用して実験してるときに、今実際にデータストアに
どんなデータが入っているのかわからなくなる。
そんな時には開発サーバを起動させた状態で以下のURLにアクセス。

http://localhost:8080/_ah/admin/datastore

すると以下のような管理画面が表示される。
sample_admin.jpg

現在登録されているデータは「Entity Kind」を選択して「List Entities」をクリックすれば表示される。

sample_admin2.jpg

あと使うのはコマンドプロンプトで直接「dev_appserver.py」をたたく位かな?



Googleの用意してくれたスタートガイドは一通りやってみたので次は
サービス機能の利用に進む予定。

でもそもそもPythonがわからないからそれも同時並行で勉強しなきゃ。。
Googleのドキュメントも隅々まで読まないと全体像が把握できないんだろうな?。。



Google App Engine 実践リファレンス
清野 克行
技術評論社
売り上げランキング: 42428
おすすめ度の平均: 4.0
4 これから始めたい方に・・・JavaでもPythonでも

2012年1月

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

ウェブページ

このアーカイブについて

このページには、2010年5月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2010年4月です。

次のアーカイブは2010年6月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 5.01