SlideShare a Scribd company logo
Submit Search
Upload
Login
Signup
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
Report
Atsuo Ishimoto
Follow
Developer at BeProud Inc.
Sep. 22, 2012
•
0 likes
•
22,897 views
1
of
35
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
Sep. 22, 2012
•
0 likes
•
22,897 views
Download Now
Download to read offline
Report
Technology
PyCon JP 2012 hands-on セッション / FlaskによるWebアプリケーションの実装とプログラミングツール
Atsuo Ishimoto
Follow
Developer at BeProud Inc.
Recommended
Pelicanによる www.python.jpの構築
Atsuo Ishimoto
14.3K views
•
33 slides
XML-RPC : Pythonが「電池付属」と呼ばれる理由
Ransui Iso
8.3K views
•
25 slides
Pyconjp2014_implementations
masahitojp
4.7K views
•
73 slides
今年使ってみて良かった、Pythonモジュール、パッケージ、ツール
aoshiman
5.1K views
•
24 slides
Introduction to cython
Atsuo Ishimoto
14.9K views
•
39 slides
tse - Pythonによるテキスト整形ユーティリティ
Atsuo Ishimoto
22.5K views
•
32 slides
More Related Content
What's hot
「Python言語」はじめの一歩 / First step of Python
Takanori Suzuki
65.9K views
•
88 slides
第1回python勉強会
Yoshio Shimomura
2.5K views
•
60 slides
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
Takanori Suzuki
3K views
•
96 slides
QtでHello, World!!
treby
2K views
•
16 slides
Pythonでゲーム作る
amusementcreators
8.5K views
•
11 slides
オープンCAEとPython
TatsuyaKatayama
12.1K views
•
20 slides
What's hot
(20)
「Python言語」はじめの一歩 / First step of Python
Takanori Suzuki
•
65.9K views
第1回python勉強会
Yoshio Shimomura
•
2.5K views
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
Takanori Suzuki
•
3K views
QtでHello, World!!
treby
•
2K views
Pythonでゲーム作る
amusementcreators
•
8.5K views
オープンCAEとPython
TatsuyaKatayama
•
12.1K views
debexpo(mentors.d.n)をハックするには
kenhys
•
223 views
3分でサーバオペレーションコマンドを作る技術
Kei IWASAKI
•
12.7K views
Python twitterとtkinterのことはじめ
Yukitaka Uchikoshi
•
4.3K views
"Continuous Publication" with Python: Another Approach
Daisuke Miyakawa
•
4.6K views
python.jpの使い方
Atsuo Ishimoto
•
10.4K views
PECL を数えてみた
y-uti
•
4K views
Python × Herokuで作る 雑談slack bot
dcubeio
•
12.1K views
各OSにおいて、OpenCVをpythonから使う方法
Katsuhiro Morishita
•
9.9K views
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
Yoshifumi Kawai
•
48.7K views
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
Yoshifumi Kawai
•
54.1K views
2017/12/21 虎の穴 Python勉強会
虎の穴 開発室
•
4.5K views
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
•
74.4K views
Python入門
Shohei Okada
•
11.4K views
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
Yoshifumi Kawai
•
56.5K views
Similar to PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
WTM53 phpフレームワーク いまさらcodeigniter
Masanori Oobayashi
3.9K views
•
44 slides
20091030cakephphandson 01
Yusuke Ando
1.3K views
•
63 slides
はじめてのCodeIgniter
Yuya Matsushima
6.4K views
•
65 slides
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
2.3K views
•
27 slides
Aizu.LT::Tokyo #4
Taku Unno
988 views
•
30 slides
Build 番号の自動更新スクリプトについて #cocoa_kansai
Tomohiro Kumagai
6.7K views
•
84 slides
Similar to PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
(20)
WTM53 phpフレームワーク いまさらcodeigniter
Masanori Oobayashi
•
3.9K views
20091030cakephphandson 01
Yusuke Ando
•
1.3K views
はじめてのCodeIgniter
Yuya Matsushima
•
6.4K views
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
•
2.3K views
Aizu.LT::Tokyo #4
Taku Unno
•
988 views
Build 番号の自動更新スクリプトについて #cocoa_kansai
Tomohiro Kumagai
•
6.7K views
第21回Creators MeetUp
Kenichi Mukai
•
2.4K views
Windows Azure PHP Tips
Microsoft Openness Japan
•
660 views
CodeIgniter東京勉強会 2011.05.14
Takako Miyagawa
•
3.2K views
Seasarプロジェクト徹底攻略
takezoe
•
5.2K views
Clrh 110716 wcfwf
Tomoyuki Obi
•
1.2K views
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
ThinReports
•
6.5K views
jQuery と MVC で実践する標準志向 Web 開発
Akira Inoue
•
1.9K views
10分でわかるFuelPHP @ 2011/12
kenjis
•
4.2K views
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
Hideharu MATSUFUJI
•
2.3K views
Enable Skype to favorite the messages
daipanchi
•
659 views
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
linzhixing
•
3.6K views
EWD 3トレーニングコース#30 ewd-xpressアプリケーションをモジュラー化する
Kiyoshi Sawada
•
299 views
hktstudy 201206 「私だってやれば出来る子!♥Multi-Mechanize♥」
Aya Komuro
•
1.4K views
Driverについて
幸雄 村上
•
923 views
More from Atsuo Ishimoto
Pythonの紹介
Atsuo Ishimoto
798 views
•
30 slides
NumPyの歴史とPythonの並行処理【PyData.tokyo One-day Conference 2018】
Atsuo Ishimoto
14.2K views
•
50 slides
行列演算とPythonの言語デザイン
Atsuo Ishimoto
9.3K views
•
27 slides
Django pgroonga
Atsuo Ishimoto
1.2K views
•
14 slides
Python 3.6 リリースパーティー 発表資料
Atsuo Ishimoto
4.4K views
•
41 slides
Python3と向かい合ってみる
Atsuo Ishimoto
5.7K views
•
20 slides
More from Atsuo Ishimoto
(10)
Pythonの紹介
Atsuo Ishimoto
•
798 views
NumPyの歴史とPythonの並行処理【PyData.tokyo One-day Conference 2018】
Atsuo Ishimoto
•
14.2K views
行列演算とPythonの言語デザイン
Atsuo Ishimoto
•
9.3K views
Django pgroonga
Atsuo Ishimoto
•
1.2K views
Python 3.6 リリースパーティー 発表資料
Atsuo Ishimoto
•
4.4K views
Python3と向かい合ってみる
Atsuo Ishimoto
•
5.7K views
Pythonのシグナル処理
Atsuo Ishimoto
•
12.6K views
Pythonのガベージコレクション
Atsuo Ishimoto
•
4.6K views
Slide at PyCon mini JP on 2011/1/29
Atsuo Ishimoto
•
1.6K views
String representation in py3k
Atsuo Ishimoto
•
1.1K views
Recently uploaded
HarukiShinkawa_FIT2023
Matsushita Laboratory
17 views
•
24 slides
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
NTT DATA Technology & Innovation
20 views
•
21 slides
ReonHata_JSAI2023
Matsushita Laboratory
12 views
•
33 slides
gtk4_gem_usage.pdf
ssuser0ef4681
9 views
•
6 slides
20230912JSSST大会基調講演_丸山.pdf
Hiroshi Maruyama
152 views
•
58 slides
松下研究室紹介_関西大学高槻キャンパスオープンキャンパス
Matsushita Laboratory
21 views
•
23 slides
Recently uploaded
(7)
HarukiShinkawa_FIT2023
Matsushita Laboratory
•
17 views
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
NTT DATA Technology & Innovation
•
20 views
ReonHata_JSAI2023
Matsushita Laboratory
•
12 views
gtk4_gem_usage.pdf
ssuser0ef4681
•
9 views
20230912JSSST大会基調講演_丸山.pdf
Hiroshi Maruyama
•
152 views
松下研究室紹介_関西大学高槻キャンパスオープンキャンパス
Matsushita Laboratory
•
21 views
IGDA Japan SIG Audio #20-1 室内・野外でのマイク収録と整音.pdf
IGDA Japan SIG-Audio
•
85 views
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
1.
PyCon JP 2012
Hands on session FlaskによるWebアプリケーションの実装と プログラミングツール Atsuo Ishimoto 2012/9/16 PyCon JP 2012 Hands on session 1
2.
講師陣 - 質問はこちらまで
@atsuoishimoto @jbking @feiz 近くの席の人とも話し合ってみよう! 2012/9/16 PyCon JP 2012 Hands on session 2
3.
本日のメニュー • 一応、Pythonの書き方は知ってる人を、「使い
こなせる」段階に • 文法の知識の次に必要な、実践的なテクニッ クを実習 2012/9/16 PyCon JP 2012 Hands on session 3
4.
環境設定 • 無線Lanつながってますか? • Python2.6
or 2.7 • Flask環境のインストール 2012/9/16 PyCon JP 2012 Hands on session 4
5.
FlaskによるWebアプリケーション • 30分 • 単純なWebアプリケーション •
Flaskとは – @mitsuhiko /Armin Ronacher – 「マイクロフレームワーク」 – シンプル – 拡張性重視 – jinja2 2012/9/16 PyCon JP 2012 Hands on session 5
6.
profileによるパフォーマンス測定 •
10分 • PythonのcProfileモジュールの使い方 • ソースコードのトレース • ボトルネックの検出 2012/9/16 PyCon JP 2012 Hands on session 6
7.
loggingモジュール • 10分 • Loggingモジュールの使い方 2012/9/16
PyCon JP 2012 Hands on session 7
8.
デバッガの使い方 • 20分 • pdbモジュールの使い方 •
スタック/トレースなどの実行環境の説明 2012/9/16 PyCon JP 2012 Hands on session 8
9.
タイムチャート 10:00 - 10:05
アジェンダ 10:05 - 10:15 環境設定 10:15 - 10:45 Flaskアプリケーションの開発 10:45 - 11:00 休憩 11:00 - 11:10 loggingモジュール 11:10 - 11:20 traceによるパフォーマンス測定 11:20 – 11:40 デバッガの使い方 11:40 - 11:45 Q/A • 早めに課題が終わった方は、先に進んでも結 構です • 余裕があったら、周囲の人を助けてあげよう! 2012/9/16 PyCon JP 2012 Hands on session 9
10.
環境設定 • 無線Lan、つながってますね?
– www.python.org の接続を確認してください • Python2.6 or 2.7 動きますね? – コンソールで python の起動を確認してください c:¥>python Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. 2012/9/16 PyCon JP 2012 Hands on session 10
11.
パッケージ管理ツール
(Linux/OS-X/Cygwin) • Flaskをインストールするためのパッケージ管 理ツールを用意します • easy_install がインストール済みならそのまま 使ってください • 無ければ – http://python-distribute.org/distribute_setup.py をダウンロード – $sudo python distribute_setup.py 2012/9/16 PyCon JP 2012 Hands on session 11
12.
パッケージ管理ツール
(Windows) • Flaskをインストールするためのパッケージ管 理ツールを用意します • easy_install がインストール済みならそのまま 使ってください • 無ければ – http://python-distribute.org/distribute_setup.py をダウンロード – C:¥Python27¥python.exe distribute_setup.py 2012/9/16 PyCon JP 2012 Hands on session 12
13.
Flaskのインストール • Windowsの場合
– C:¥Python27¥Scripts¥easy_install.exe flask • Unix系(Linux/OS-X/Cygwin)の場合 – sudo easy_install flask • 動作確認 – python –c "import flask" でエラーが出なければOK 2012/9/16 PyCon JP 2012 Hands on session 13
14.
FlaskによるWebアプリケーション 1. プロジェクトディレクトリの作成
mkdir pyconjp_2012 pyconjp_2012 cd pyconjp_2012 mkdir templates handson.py mkdir static templates message_form.html show_messages.html static style.css 2012/9/16 PyCon JP 2012 Hands on session 14
15.
FlaskによるWebアプリケーション 2. ソースファイルを編集 https://github.com/atsuoishimoto/pyconjp_2012 を参照してください。まじめに写経しても、コピペでもかまいません。
文字コードはUTF-8で! Zipファイル https://github.com/atsuoishimoto/pyconjp_2012/zipball/master 2012/9/16 PyCon JP 2012 Hands on session 15
16.
handson.py # -*- coding:
utf-8 -*- # /add_messageでリクエストのメッセージを登録 from flask import Flask, request, session @app.route('/add_message', methods=['POST']) from flask import render_template, redirect, url_for def add_message(): # Sessionにメッセージを登録 # Flaskのアプリケーション オブジェクトを作成 msgs = session.get('messages', []) app = Flask(__name__) msgs.append(request.form['message']) session['messages'] = msgs[-10:] return redirect(url_for('show_messages')) # http://localhost:5000/でアクセスされる関数 @app.route('/') def index_html(): # /showでリクエストのメッセージを登録 return """ @app.route('/show') <!doctype html> def show_messages(): <ul> # テンプレートファイル templates/show_messages.htmlを表示 <li><a href="/message_form">メッセージ追加</a></li> return render_template('show_messages.html', <li><a href="/show">メッセージ表示</a></li> </ul> messages=reversed(session['messages'])) """ def main(): # /message_formでアクセスされる関数 app.secret_key = "secret" @app.route('/message_form') app.run(debug = True) def message_form(): # テンプレートファイル templates/message_form.htmlを表示 if __name__ == '__main__': return render_template('message_form.html') main() 2012/9/16 PyCon JP 2012 Hands on session 16
17.
message_form.html <!doctype html> <link rel=stylesheet
type=text/css href="{{ url_for('static', filename='style.css') }}"> <title>メッセージ登録</title> <h1>メッセージ登録</h1> <form method="post" action="{{url_for('add_message')}}"> <div>メッセージ : <input type="text" name="message" size=40> <button type="submit">登録</button> </div> </form> 2012/9/16 PyCon JP 2012 Hands on session 17
18.
show_messages.html <!doctype html> <link rel=stylesheet
type=text/css href="{{ url_for('static', filename='style.css') }}"> <h1>登録済みメッセージ</h1> {% for message in messages %} <div>{{ message }}</div> {% endfor %} <hr/> <a href="{{ url_for('message_form') }} ">戻る</a> 2012/9/16 PyCon JP 2012 Hands on session 18
19.
style.css <!doctype html> <link rel=stylesheet
type=text/css href="{{ url_for('static', filename='style.css') }}"> <title>メッセージ登録</title> <h1>メッセージ登録</h1> <form method="post" action="{{url_for('add_message')}}"> <div>メッセージ : <input type="text" name="message" size=40> <button type="submit">登録</button> </div> </form> 2012/9/16 PyCon JP 2012 Hands on session 19
20.
FlaskによるWebアプリケーション 3. 実行 $python handson.py ブラウザで
http://localhost:5000/ を開きます。 4. 終了方法 ^C(Control+C)で終了します。 Windowsで、終了するまで時間がかかる場合、 Control+Breakでも終了します。 2012/9/16 PyCon JP 2012 Hands on session 20
21.
FlaskによるWebアプリケーション 5. ソースコード解説
app = Flask(__name__) Flaskアプリケーションオブジェクトの作成 @app.route('/') @app.route('URL')で、URLへの def index_html(): return "Hello" リクエストハンドラを指定 render_template( Jinja2テンプレートを実行 'テンプレートファイル', arg=vale) app.secret_key = "secret" セッションを利用するためのおまじない 2012/9/16 PyCon JP 2012 Hands on session 21
22.
FlaskによるWebアプリケーション 6. jinja2テンプレート解説
<link rel=stylesheet type=text/css href="{{ url_for('static', filename='style.css') }}"> {{ 式 }} で式をHTMLに展開 {{ url_for(…) }} でファイルへのURLを取得 {% for message in messages %} <div>{{ message }}</div> {% endfor %} {% for x in xx %} ~ {% endfor %} で for ループ 2012/9/16 PyCon JP 2012 Hands on session 22
23.
FlaskによるWebアプリケーション 7. 自由演習 時間があったらどうぞ a.各ページに、現在時刻を表示してみよう b.メッセージの長さチェック処理を入れてみよう c.メッセージをデータベースに格納してみよう 2012/9/16
PyCon JP 2012 Hands on session 23
24.
cProfileモジュール
(注) Debian/Ubuntu では、 $sudo apt-get install python-profiler が必要な場合があります • profile/cProfileはPythonスクリプトの実行速度 を測定するモジュールです • 関数の呼び出し回数や処理時間を集計します • profileとcProfileの機能はほぼ同じですが、C言 語版のcProfileの方が高速です 2012/9/16 PyCon JP 2012 Hands on session 24
25.
cProfileモジュール • show_messages()関数を修正します(Python2.6用)
@app.route('/show') def show_messages(): return render_template('show_messages.html', messages=reversed(session['messages'])) @app.route('/show') def show_messages(): import cProfile localvars = locals().copy() cProfile.runctx("""ret = render_template('show_messages.html', messages=reversed(session['messages']))""", globals(), localvars) return localvars["ret"] 2012/9/16 PyCon JP 2012 Hands on session 25
26.
cProfileモジュール • show_messages()関数を修正します(Python2.7用)
@app.route('/show') def show_messages(): return render_template('show_messages.html', messages=reversed(session['messages'])) @app.route('/show') def show_messages(): import cProfile localvars = locals().copy() cProfile.runctx("""ret = render_template('show_messages.html', messages=reversed(session['messages']))""", globals(), localvars, sort='cumulative') return localvars["ret"] 2012/9/16 PyCon JP 2012 Hands on session 26
27.
ローカル変数を参照するコードをプロファイル
def spam(): ham = 100 value = egg(ham) return value def spam(): cProfile.runctx()には、 ham = 100 localvars = locals().copy() ローカル変数辞書をコピーして渡す cProfile.runctx( “value = egg(ham)”, locals()が返す辞書(sys._getframe().f_locals)は、 globals(), localvars) インタープリタの都合で初期化されてしまう場合があるため return localvars[‘value’] 更新されたローカル変数は、コピー した辞書から値を取得する 2012/9/16 PyCon JP 2012 Hands on session 27
28.
cProfileモジュール 実行結果 4569 function calls
(4272 primitive calls) in 0.005 seconds Ordered by: cumulative time ncalls tottime percall cumtime percall filename:lineno(function) 1 0.000 0.000 0.005 0.005 <string>:1(<module>) … ncalls 呼び出し回数 tottime 他の関数呼び出しの時間を含まない、この関数での処理時間 percall 呼び出し一回あたりの関数内処理時間(tottime ÷ ncall) cumtime 他の関数呼び出しを含む、この関数の総処理時間 percall 呼び出し一回あたりの総処理時間(cumtime ÷ ncall) Filename:lineno ファイル名と行番号、関数名など 2012/9/16 PyCon JP 2012 Hands on session 28
29.
loggingモジュール • 実行ログを出力するフレームワーク
LoggerオブジェクトはHandler で ルート logger イベントをテキスト化して出力する Spam Logger Egg Logger ハンドラ Spam.Ham Loggerオブジェクトは階層構造を Logger 持ち、イベントを上位のLoggerに 通知する Window ファイル イベントログ イベント Syslog 2012/9/16 PyCon JP 2012 Hands on session 29
30.
Flaskのロギングサポート • Debug用のloggerが用意されている
• message_form()を関数を修正します @app.route('/message_form') def message_form(): return render_template('message_form.html') @app.route('/message_form') def message_form(): import logging app.logger.setLevel(logging.DEBUG) # 出力対象のイベントを指定 app.logger.debug(u"デバッグメッセージ") app.logger.error(u“エラーメッセージ:%s;%d“, “Spam”, 100) # 文字列変換 return render_template('message_form.html') 2012/9/16 PyCon JP 2012 Hands on session 30
31.
pdbモジュール • Python Debugger •
変数・コールスタックの表示、ステップ実行など • とりあえずブレークしてみよう @app.route('/message_form') def message_form(): return render_template('message_form.html') @app.route('/message_form') def message_form(): import pdb; pdb.set_trace() return render_template('message_form.html') 2012/9/16 PyCon JP 2012 Hands on session 31
32.
pdbモジュール • (Pdb)というプロンプトが表示されたらコマンド
入力可能 c:¥cygwin¥home¥ishimoto¥src¥handson¥handson.py(26)messag e_form() -> return render_template('message_form.html') (Pdb) 2012/9/16 PyCon JP 2012 Hands on session 32
33.
pdbモジュール
コマンド 意味 例 l(ist) 実行中のソース行を表示する (Pdb) l w(here) 実行中の呼び出し履歴を表示する (Pdb) w p式 式の値を計算して表示する (Pdb) p var1 args 関数の引数を表示する (Pdb) args ! ステートメント ステートメントを実行する (Pdb) ! var1 = 'spam' s(tep) 次の行まで実行する。次の行が関数呼び (Pdb) s 出しなら、その関数の先頭行まで実行する n(ext) 次の行まで実行する。次の行が関数呼び (Pdb) n 出しなら、その関数が終了して現在の関数 に復帰するまで実行する。 c(ontinue) Pdbプロンプトから抜けて、処理を続行する。 (Pdb) c 2012/9/16 PyCon JP 2012 Hands on session 33
34.
Q/A • 質問があったらどうぞ 2012/9/16
PyCon JP 2012 Hands on session 34
35.
お疲れ様でした! 2012/9/16
PyCon JP 2012 Hands on session 35