Enviar búsqueda
Cargar
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
•
8 recomendaciones
•
23,094 vistas
Atsuo Ishimoto
Seguir
PyCon JP 2012 hands-on セッション / FlaskによるWebアプリケーションの実装とプログラミングツール
Leer menos
Leer más
Tecnología
Denunciar
Compartir
Denunciar
Compartir
1 de 35
Descargar ahora
Descargar para leer sin conexión
Recomendados
Pelicanによる www.python.jpの構築
Pelicanによる www.python.jpの構築
Atsuo Ishimoto
XML-RPC : Pythonが「電池付属」と呼ばれる理由
XML-RPC : Pythonが「電池付属」と呼ばれる理由
Ransui Iso
Pyconjp2014_implementations
Pyconjp2014_implementations
masahitojp
今年使ってみて良かった、Pythonモジュール、パッケージ、ツール
今年使ってみて良かった、Pythonモジュール、パッケージ、ツール
aoshiman
Introduction to cython
Introduction to cython
Atsuo Ishimoto
tse - Pythonによるテキスト整形ユーティリティ
tse - Pythonによるテキスト整形ユーティリティ
Atsuo Ishimoto
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6
Ransui Iso
Pelican の紹介 / World Plone Day 2017 Tokyo
Pelican の紹介 / World Plone Day 2017 Tokyo
Kei IWASAKI
Más contenido relacionado
La actualidad más candente
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python
Takanori Suzuki
第1回python勉強会
第1回python勉強会
Yoshio Shimomura
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
Takanori Suzuki
QtでHello, World!!
QtでHello, World!!
treby
Pythonでゲーム作る
Pythonでゲーム作る
amusementcreators
オープンCAEとPython
オープンCAEとPython
TatsuyaKatayama
debexpo(mentors.d.n)をハックするには
debexpo(mentors.d.n)をハックするには
kenhys
3分でサーバオペレーションコマンドを作る技術
3分でサーバオペレーションコマンドを作る技術
Kei IWASAKI
Python twitterとtkinterのことはじめ
Python twitterとtkinterのことはじめ
Yukitaka Uchikoshi
"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another Approach
Daisuke Miyakawa
python.jpの使い方
python.jpの使い方
Atsuo Ishimoto
PECL を数えてみた
PECL を数えてみた
y-uti
Python × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack bot
dcubeio
各OSにおいて、OpenCVをpythonから使う方法
各OSにおいて、OpenCVをpythonから使う方法
Katsuhiro Morishita
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
Yoshifumi Kawai
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
Yoshifumi Kawai
2017/12/21 虎の穴 Python勉強会
2017/12/21 虎の穴 Python勉強会
虎の穴 開発室
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
Python入門
Python入門
Shohei Okada
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
Yoshifumi Kawai
La actualidad más candente
(20)
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python
第1回python勉強会
第1回python勉強会
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
QtでHello, World!!
QtでHello, World!!
Pythonでゲーム作る
Pythonでゲーム作る
オープンCAEとPython
オープンCAEとPython
debexpo(mentors.d.n)をハックするには
debexpo(mentors.d.n)をハックするには
3分でサーバオペレーションコマンドを作る技術
3分でサーバオペレーションコマンドを作る技術
Python twitterとtkinterのことはじめ
Python twitterとtkinterのことはじめ
"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another Approach
python.jpの使い方
python.jpの使い方
PECL を数えてみた
PECL を数えてみた
Python × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack bot
各OSにおいて、OpenCVをpythonから使う方法
各OSにおいて、OpenCVをpythonから使う方法
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
2017/12/21 虎の穴 Python勉強会
2017/12/21 虎の穴 Python勉強会
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Python入門
Python入門
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
Similar a PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
Masanori Oobayashi
20091030cakephphandson 01
20091030cakephphandson 01
Yusuke Ando
はじめてのCodeIgniter
はじめてのCodeIgniter
Yuya Matsushima
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
Aizu.LT::Tokyo #4
Aizu.LT::Tokyo #4
Taku Unno
Build 番号の自動更新スクリプトについて #cocoa_kansai
Build 番号の自動更新スクリプトについて #cocoa_kansai
Tomohiro Kumagai
第21回Creators MeetUp
第21回Creators MeetUp
Kenichi Mukai
Windows Azure PHP Tips
Windows Azure PHP Tips
Microsoft Openness Japan
CodeIgniter東京勉強会 2011.05.14
CodeIgniter東京勉強会 2011.05.14
Takako Miyagawa
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
takezoe
Clrh 110716 wcfwf
Clrh 110716 wcfwf
Tomoyuki Obi
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
ThinReports
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発
Akira Inoue
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12
kenjis
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
Hideharu MATSUFUJI
Enable Skype to favorite the messages
Enable Skype to favorite the messages
daipanchi
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
linzhixing
EWD 3トレーニングコース#30 ewd-xpressアプリケーションをモジュラー化する
EWD 3トレーニングコース#30 ewd-xpressアプリケーションをモジュラー化する
Kiyoshi Sawada
hktstudy 201206 「私だってやれば出来る子!♥Multi-Mechanize♥」
hktstudy 201206 「私だってやれば出来る子!♥Multi-Mechanize♥」
Aya Komuro
Driverについて
Driverについて
幸雄 村上
Similar a PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
(20)
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
20091030cakephphandson 01
20091030cakephphandson 01
はじめてのCodeIgniter
はじめてのCodeIgniter
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
Aizu.LT::Tokyo #4
Aizu.LT::Tokyo #4
Build 番号の自動更新スクリプトについて #cocoa_kansai
Build 番号の自動更新スクリプトについて #cocoa_kansai
第21回Creators MeetUp
第21回Creators MeetUp
Windows Azure PHP Tips
Windows Azure PHP Tips
CodeIgniter東京勉強会 2011.05.14
CodeIgniter東京勉強会 2011.05.14
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
Clrh 110716 wcfwf
Clrh 110716 wcfwf
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
Enable Skype to favorite the messages
Enable Skype to favorite the messages
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
EWD 3トレーニングコース#30 ewd-xpressアプリケーションをモジュラー化する
EWD 3トレーニングコース#30 ewd-xpressアプリケーションをモジュラー化する
hktstudy 201206 「私だってやれば出来る子!♥Multi-Mechanize♥」
hktstudy 201206 「私だってやれば出来る子!♥Multi-Mechanize♥」
Driverについて
Driverについて
Más de Atsuo Ishimoto
Pythonの紹介
Pythonの紹介
Atsuo Ishimoto
NumPyの歴史とPythonの並行処理【PyData.tokyo One-day Conference 2018】
NumPyの歴史とPythonの並行処理【PyData.tokyo One-day Conference 2018】
Atsuo Ishimoto
行列演算とPythonの言語デザイン
行列演算とPythonの言語デザイン
Atsuo Ishimoto
Django pgroonga
Django pgroonga
Atsuo Ishimoto
Python 3.6 リリースパーティー 発表資料
Python 3.6 リリースパーティー 発表資料
Atsuo Ishimoto
Python3と向かい合ってみる
Python3と向かい合ってみる
Atsuo Ishimoto
Pythonのシグナル処理
Pythonのシグナル処理
Atsuo Ishimoto
Pythonのガベージコレクション
Pythonのガベージコレクション
Atsuo Ishimoto
Slide at PyCon mini JP on 2011/1/29
Slide at PyCon mini JP on 2011/1/29
Atsuo Ishimoto
String representation in py3k
String representation in py3k
Atsuo Ishimoto
Más de Atsuo Ishimoto
(10)
Pythonの紹介
Pythonの紹介
NumPyの歴史とPythonの並行処理【PyData.tokyo One-day Conference 2018】
NumPyの歴史とPythonの並行処理【PyData.tokyo One-day Conference 2018】
行列演算とPythonの言語デザイン
行列演算とPythonの言語デザイン
Django pgroonga
Django pgroonga
Python 3.6 リリースパーティー 発表資料
Python 3.6 リリースパーティー 発表資料
Python3と向かい合ってみる
Python3と向かい合ってみる
Pythonのシグナル処理
Pythonのシグナル処理
Pythonのガベージコレクション
Pythonのガベージコレクション
Slide at PyCon mini JP on 2011/1/29
Slide at PyCon mini JP on 2011/1/29
String representation in py3k
String representation in py3k
Último
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
ssuser370dd7
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
ssuser539845
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
arts yokohama
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
Shumpei Kishi
2024 03 CTEA
2024 03 CTEA
arts yokohama
2024 04 minnanoito
2024 04 minnanoito
arts yokohama
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
arts yokohama
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
Matsushita Laboratory
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
Ayachika Kitazaki
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
Tetsuya Nihonmatsu
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
Sadao Tokuyama
Último
(12)
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
2024 03 CTEA
2024 03 CTEA
2024 04 minnanoito
2024 04 minnanoito
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
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
Descargar ahora