Googleの最近のブログ記事

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

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

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でも
ちょっと色々思うところがあり、GoogleのApp Engineをいまさらながら勉強してみようかと。。

ついでにPythonの勉強にもなればいいな。

というわけでGAE-Pythonの開発環境を設定してみる。

まずはPythonのインストールから。

Python公式サイトからGAE-Pythonでサポートされている2.5.xをダウンロード&インストールします。

Download  >  Releases

今回は参考本と同じようにpython-2.5.4.msiをダウンロードしてインストールします。

何も考えずに全部デフォルトでインストールしてみました。

次にGAEのPython SDKをダウンロードします。

GoogleAppEngine_1.3.3.msiをダウンロードしてインストール。

インストールしたフォルダの内容は以下のようになりました。

p_1.jpg
dev_appserver.py
これは開発用のWebサーバのようです。Googleのクラウド環境をエミュレートして動作確認ができるらしい。

appcfg.py
これでGAEのクラウド環境へのアップロード/デプロイを行うみたい。

ではデモ用のプログラムが用意されているようなので実行してみます。

コマンドプロンプトを起動してdev_appserver.pyのところまで移動します。
そして

dev_appserver.py demos\guestbook

と入力します。

p_2.jpg


画面のように最後にローカルのURLが表示されれば成功のようです。

実際にブラウザから以下にアクセスすると
http://localhost:8080/

p_3.jpg
こんな画面が表示されます。
適当に入力して「Sign Guestbook」をクリックすると、



An anonymous person wrote:

    テスト入力です。

とか表示されます。
これで一応動くところまでこぎつけました。

終了の方法は
「Ctrl+C」または「Ctrl+Break」みたいです。

今日はとりあえずここまで。





Google App Engine 実践リファレンス
清野 克行
技術評論社
売り上げランキング: 26659
おすすめ度の平均: 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        

ウェブページ

このアーカイブについて

このページには、過去に書かれたブログ記事のうちGoogleカテゴリに属しているものが含まれています。

次のカテゴリはMTです。

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

Powered by Movable Type 5.01