SlideShare une entreprise Scribd logo
1  sur  21
Django on App Engine
(Message Board)
 メッセージボード
 ログインするとメッセージを書き込める
シンプルなWebアプリ
 Demo:
http://msg.codeflask.appspot.com/
 Webアプリ設計
 フレームワークの基礎
 Djangoテンプレート
 AppEngineのDB(BigTable(NoSQL))
 ページ管理
 フォームバリデーション
 Google OpenID
 メッセージ(タイトル、本文)を投稿して見れ
るようにする
 投稿にはログインが必要
 過去のメッセージを遡って見れる
 削除・再編集とかはとりあえず付けない
 ID検索とかもつけない
 トップページ:
 過去のメッセージが新しい順で3件表示
 3件以外はnext, prevボタンでページ移動
 メッセージはフル(タイトル・本文・書いた人・日時)
で表示
 書き込みへのリンクを付ける
 書き込みページ
 要ログイン
 タイトル・本文を入力して送信
 名前はログインネームから自動で
 書き終わるとトップへリダイレクト
(?)
IndexView
BigTable
WriteView
• メッセージ取得
• ページ分割
• レンダリング
• リクエスト受け取り
• フォーム表示
• フォーム検証
• メッセージ書き込み
put
fetch
DB
なし!
 NoSQLではテーブルという概念がない
 PHPの辞書とかに似た形式でデータ保存
 柔軟だけど、こういったアプリでは構造化さ
れてないので使いづらい
 → データモデルの定義
 Db.Modelを継承したクラスを定義
 1インスタンス ≒ 1レコード
 ユーザー名、タイトル、本文、日付
を定義
URL
 /
 トップページ(1ページ目のメッセージ表示)
 /{$num}
 $numページ目のメッセージ表示
 /write/
 書き込みフォーム表示
 まず表示側(IndexView)から
 やること:
 DBから取得
 ページに分割
 表示
DB
 MessageModelにクラスメソッドを追加
 日付順で逆ソート
 SQLを書く必要なし
 3件ごとにページに分けるにはどうすればい
いか
 3件だけ取得 → ×
 ページ分割には
 前にページが有るか
 次にページが有るか
 次のページは何ページ目か
などといった情報が必要
 自分で書くのは面倒臭い
 →Paginatorの出番
Paginator
 リストなどを渡すと自動でページ分割し
必要な情報などもセットで提供してくれる
 p = Paginator(lists, page_count)
 p.count #=> 総ページ数
 page1 = p.page(1)
 for item in page1:
 Print item
 page1.has_next() #=>次のページが有るか
 page1.next_page_number()
 page1.start_index()
 …
View HTML Source
 テンプレートの継承や部分置換などができる
 強力なタグ・フィルターが用意されてる
 自作タグ・フィルターなども可
WriteView
 やること
 OpenID(Google)
 フォーム表示
 フォーム検証(バリデーション)
 メッセージ保存
OpenID(Google)
 user = users.get_current_user()
 if not user:
 return HttpResponseRedirect(
 users.create_login_url(request.path)
 )
 これだけ。
 ログインユーザーを取得
 取得できなければログイン画面を作りそこにリダイレクト
 Create_login_userの引数はログイン後戻ってくる場所。
 request.path とすることで今のパスに戻ってこれる
formModel
 どんなフォームなのかを定義してあげると、
Djangoが勝手にいろいろやってくれる
 こんなかんじで定義
 同じWriteViewで、GETとPOSTの違いによっ
て挙動を変える
 GET:
 フォームを表示
 POST:
 DB書き込み。
入力エラーならエラー文付きで再度フォーム表示
 form = MessageForm()
 これでフォーム定義に従ったフォームが作ら
れる(便利)
( )
 form = MessageForm(request.POST)
 if form.is_valid():
 # 内容OK
 フォームの定義を工夫するともっと複雑な
チェック可能
 https://github.com/pistatium/appengine_bo
ard
 このメッセージボードの機能拡張
 メッセージ削除・再編集
 同じUser名のメッセージ抽出

Contenu connexe

En vedette

Pythonではじめる野球プログラミング - kawasaki.rb #15 2014/8/27
Pythonではじめる野球プログラミング  - kawasaki.rb #15 2014/8/27Pythonではじめる野球プログラミング  - kawasaki.rb #15 2014/8/27
Pythonではじめる野球プログラミング - kawasaki.rb #15 2014/8/27Shinichi Nakagawa
 
Webフレームワークパネル(Django) at PyConJP 2012
Webフレームワークパネル(Django) at PyConJP 2012Webフレームワークパネル(Django) at PyConJP 2012
Webフレームワークパネル(Django) at PyConJP 2012makoto tsuyuki
 
Djangoフレームワークの紹介 OSC2015北海道
Djangoフレームワークの紹介 OSC2015北海道Djangoフレームワークの紹介 OSC2015北海道
Djangoフレームワークの紹介 OSC2015北海道Shinya Okano
 
Python札幌201406
Python札幌201406Python札幌201406
Python札幌201406Shinya Okano
 
Gunma.web #24 MySQL HA
Gunma.web #24 MySQL HAGunma.web #24 MySQL HA
Gunma.web #24 MySQL HAYusuke Muraoka
 
素振りのススメ at Python入門者の集い
素振りのススメ at Python入門者の集い素振りのススメ at Python入門者の集い
素振りのススメ at Python入門者の集いTakayuki Shimizukawa
 
価値を届ける技術 #bpstudy 96
価値を届ける技術 #bpstudy 96価値を届ける技術 #bpstudy 96
価値を届ける技術 #bpstudy 96hirokiky
 
ゲームインフラとGoogle Cloud Platformと酒!
ゲームインフラとGoogle Cloud Platformと酒!ゲームインフラとGoogle Cloud Platformと酒!
ゲームインフラとGoogle Cloud Platformと酒!Hasegawa Yusuke
 
Pycon2014 django performance
Pycon2014 django performancePycon2014 django performance
Pycon2014 django performancehirokiky
 
ウマナリティクス#2資料『PAI競馬予測が1番人気に挑む!』
ウマナリティクス#2資料『PAI競馬予測が1番人気に挑む!』ウマナリティクス#2資料『PAI競馬予測が1番人気に挑む!』
ウマナリティクス#2資料『PAI競馬予測が1番人気に挑む!』predictori
 
Djangoアプリの実践的設計手法
Djangoアプリの実践的設計手法Djangoアプリの実践的設計手法
Djangoアプリの実践的設計手法Ian Lewis
 
AWS Lambda を使ってみた話 at づや会Vol.3
AWS Lambda を使ってみた話 at  づや会Vol.3AWS Lambda を使ってみた話 at  づや会Vol.3
AWS Lambda を使ってみた話 at づや会Vol.3ko ty
 
Pythonではじめる野球プログラミング PyCon JP 2014 9/14 Talk Session
Pythonではじめる野球プログラミング PyCon JP 2014 9/14 Talk SessionPythonではじめる野球プログラミング PyCon JP 2014 9/14 Talk Session
Pythonではじめる野球プログラミング PyCon JP 2014 9/14 Talk SessionShinichi Nakagawa
 
Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装
Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装
Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装Satoshi Nagayasu
 
データ分析スクリプトのツール化入門 - PyConJP 2016
データ分析スクリプトのツール化入門 - PyConJP 2016データ分析スクリプトのツール化入門 - PyConJP 2016
データ分析スクリプトのツール化入門 - PyConJP 2016Akinori Kohno
 
Django から各種チャットツールに通知するライブラリを作った話
Django から各種チャットツールに通知するライブラリを作った話Django から各種チャットツールに通知するライブラリを作った話
Django から各種チャットツールに通知するライブラリを作った話Yusuke Miyazaki
 
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016Takayuki Shimizukawa
 

En vedette (19)

Pythonではじめる野球プログラミング - kawasaki.rb #15 2014/8/27
Pythonではじめる野球プログラミング  - kawasaki.rb #15 2014/8/27Pythonではじめる野球プログラミング  - kawasaki.rb #15 2014/8/27
Pythonではじめる野球プログラミング - kawasaki.rb #15 2014/8/27
 
Webフレームワークパネル(Django) at PyConJP 2012
Webフレームワークパネル(Django) at PyConJP 2012Webフレームワークパネル(Django) at PyConJP 2012
Webフレームワークパネル(Django) at PyConJP 2012
 
Djangoフレームワークの紹介 OSC2015北海道
Djangoフレームワークの紹介 OSC2015北海道Djangoフレームワークの紹介 OSC2015北海道
Djangoフレームワークの紹介 OSC2015北海道
 
Python札幌201406
Python札幌201406Python札幌201406
Python札幌201406
 
Gunma.web #24 MySQL HA
Gunma.web #24 MySQL HAGunma.web #24 MySQL HA
Gunma.web #24 MySQL HA
 
素振りのススメ at Python入門者の集い
素振りのススメ at Python入門者の集い素振りのススメ at Python入門者の集い
素振りのススメ at Python入門者の集い
 
Django learning Part2
Django learning Part2Django learning Part2
Django learning Part2
 
価値を届ける技術 #bpstudy 96
価値を届ける技術 #bpstudy 96価値を届ける技術 #bpstudy 96
価値を届ける技術 #bpstudy 96
 
ゲームインフラとGoogle Cloud Platformと酒!
ゲームインフラとGoogle Cloud Platformと酒!ゲームインフラとGoogle Cloud Platformと酒!
ゲームインフラとGoogle Cloud Platformと酒!
 
Pycon2014 django performance
Pycon2014 django performancePycon2014 django performance
Pycon2014 django performance
 
ウマナリティクス#2資料『PAI競馬予測が1番人気に挑む!』
ウマナリティクス#2資料『PAI競馬予測が1番人気に挑む!』ウマナリティクス#2資料『PAI競馬予測が1番人気に挑む!』
ウマナリティクス#2資料『PAI競馬予測が1番人気に挑む!』
 
Django 1.9
Django 1.9Django 1.9
Django 1.9
 
Djangoアプリの実践的設計手法
Djangoアプリの実践的設計手法Djangoアプリの実践的設計手法
Djangoアプリの実践的設計手法
 
AWS Lambda を使ってみた話 at づや会Vol.3
AWS Lambda を使ってみた話 at  づや会Vol.3AWS Lambda を使ってみた話 at  づや会Vol.3
AWS Lambda を使ってみた話 at づや会Vol.3
 
Pythonではじめる野球プログラミング PyCon JP 2014 9/14 Talk Session
Pythonではじめる野球プログラミング PyCon JP 2014 9/14 Talk SessionPythonではじめる野球プログラミング PyCon JP 2014 9/14 Talk Session
Pythonではじめる野球プログラミング PyCon JP 2014 9/14 Talk Session
 
Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装
Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装
Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装
 
データ分析スクリプトのツール化入門 - PyConJP 2016
データ分析スクリプトのツール化入門 - PyConJP 2016データ分析スクリプトのツール化入門 - PyConJP 2016
データ分析スクリプトのツール化入門 - PyConJP 2016
 
Django から各種チャットツールに通知するライブラリを作った話
Django から各種チャットツールに通知するライブラリを作った話Django から各種チャットツールに通知するライブラリを作った話
Django から各種チャットツールに通知するライブラリを作った話
 
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
 

Python勉強会資料(MessageBoard作成)