SlideShare una empresa de Scribd logo
1 de 44
Descargar para leer sin conexión
Python3で
Webアプリケーション
      aodag
   PyConJP2012
お前誰よ

Atsushi ODAGiri
aodag

@aodag


株式会社ビープラウド
Python3!
Python3.2.3
Python3.3rc2
来週(9/22)に3.3finalの予定
Python3での重要な変更

標準ライブラリが整理された
str,unicodeがbytes,strに。ユニコードと生データと
の違いが明確に。
相対importの扱いが変更された。相対モジュール
をインポートするときは、 "from . "が必要に。
Python3の情報
PYPI Python3Packages

http://pypi.python.org/pypi?:
action=browse&c=533&show=all
Python3の情報 Wall Of Shame

http://python3wos.appspot.com/
すでにPython3対応している
フレームワーク

Pyramid
Bottle
Bobo
CherryPy
Tornado
Python3での課題

PEP333(WSGI 1.0) であいまいな点が多い
特に文字コード、ユニコード関連

Python3では bytesとstrの違いが明確になった。

WSGIでも明確に! -> PEP3333(WSGI 1.0.1)
WSGIで行こう

def hello(environ, start_response):
  start_response(['200 OK',
     ('Content-type', 'text/plain')])
  return [b"Hello"]

from wsgiref.simple_server import make_server
httpd = make_server('', 8080, hello)
httpd.serve_forever()
(´・ω・`)
めんどくさいですねぇ
とりあえず必要だと思うもの

リクエストオブジェクト
ルーティング
HTMLテンプレート
WSGIサーバー
WebObで行こう

from webob.dec import wsgify

@wsgify
def hello(request):
  return "Hello"

from wsgiref.simple_server import make_server
httpd = make_server('', 8080, hello)
httpd.serve_forever()
WSGIサーバー

cherrypy
waitress
tornado
URLディスパッチ

WebDispatch

WSGIアプリの様々なディスパッチをサポート

URLパターン
リクエストメソッド
WebDispatch
dispatcher = URLDispatcher()
dispatcher.add_url('top', '/', index)
dispatcher.add_url('hello', '/hello/{name}', hello)
dispatcher.add_url('top', '/good-by', bye)
urlvars
urlパターン:/hello/{name}
実際のurl: /hello/aodag
urlvars: {'name': 'aodag'}

@wsgify
def hello(request):
  name = request.urlvars.get('name', 'world')
  return "Hello, {0}".format(name)
テンプレートエンジン

Jinja2
Mako
Chameleon
Tempita
...
(`・ω・) 意外と充実!
jinja2
loader=PackageLoader(__name__, 'templates')

env = Environment(loader=loader)
jinja2
@wsgify
def hello(req):
  name = req.urlvars.get('name', 'world')
  tmpl = env.get_template('index.html')
  return tmpl.render(name=name)
(`・ω・) これで
**MVC**
  できるね!
CSSとか
画像とか
どうするの
NGINXでやれよ!
と、思いますが、
開発中にNginx使うのも萎えるので。
スタティックファイルを扱う

webob.static.FileApp
webob.static.DiectoryApp
static_resource = pkg_resources.resource_file
(__name__, 'static')

static_app = DirectoryApp(static_resource)

application.add_url('static', '/static/*', static_app)
(´・ω・`) データはどうしよう
データベースアクセス

ドライバ: psycopg2
ORM: SQLAlchemy
マイグレーション: alembic
(`・ω・) 予想以上に
  ちゃんと動くぞ!
セッション

Beaker

Beaker自体は動く
バックエンドは Memory, Fileは問題なし
その他のバックエンドは依存ライブラリが対応して
いるか未確認
認証

repoze.who (trunk)

多分 2.1 でリリース

使いたければ setup.py の dependency_links に以
下を追加

https://github.com/repoze/repoze.
who/zipball/master#egg=repoze.who-2.1dev
フォームライブラリ

deform
colander

問題なく利用可能。
っていうか僕が対応しました(・∀・)
画像処理

pillow はよ
(´・ω・`) PILとかは
  非公式パッチで
動くらしいですねぇ
       |
   \  __  /
   _ (m) _ピコーン
      |ミ|
    /  `´  \
     ('A`)
     ノヽノヽ
       くく
画像処理

PyQtにQImageがあるじゃないか!
PyQt
説明しよう!PyQtとは!
UNIX系のデスクトップ環境KDEで採用されている
ことで有名なGUIツールキットQtのPythonバイン
ディングである!
つまり!
画像をリサイズするためだけに、GUIツールキット
を使おうとしているのである!
(゚д゚ )
( ゚д゚ )
QImageを使うために

QImageがQtGUIモジュールにあるため、ヘッドレ
ス不可能
LinuxだったらX11が必要になります
Qtをインストール
PyQtをインストール
ファイルアップロードからの
サムネイル保存

data = validated['image']['fp'].read()
image = QtGui.QImage.fromData(data)
thumbnail = image.scaled(128, 128,
  aspectRatioMode=Qt.KeepAspectRatio)
thumbnail.save(thumbnail_filename)
まとめ

画像処理だけ難あり?
他は結構でそろっている

が、実際にはフレームワークを使うことになるでしょ
う。
つまり、Django待ち
参考

● Wall of Shame http://python3wos.appspot.
  com/
● PyPI Python3 Packages http://pypi.python.
  org/pypi?:action=browse&c=533&show=all
● Python Web Server Gateway Interface v1.0
● http://www.python.org/dev/peps/pep-333/
● Python Web Server Gateway Interface v1.
  0.1 http://www.python.org/dev/peps/pep-
  3333/

Más contenido relacionado

La actualidad más candente

Python エンジニアの作り方 2011.08 #pyconjp
Python エンジニアの作り方 2011.08 #pyconjpPython エンジニアの作り方 2011.08 #pyconjp
Python エンジニアの作り方 2011.08 #pyconjp
Takeshi Komiya
 
Python3と向かい合ってみる
Python3と向かい合ってみるPython3と向かい合ってみる
Python3と向かい合ってみる
Atsuo Ishimoto
 
モバイルバックエンドもPythonでヨーソロー!
モバイルバックエンドもPythonでヨーソロー!モバイルバックエンドもPythonでヨーソロー!
モバイルバックエンドもPythonでヨーソロー!
Yuya Oka
 
簡易TRPG向けチャットツールOnset!
簡易TRPG向けチャットツールOnset!簡易TRPG向けチャットツールOnset!
簡易TRPG向けチャットツールOnset!
kiridaruma
 
『Pythonによる ai・機械学習・深層学習アプリのつくり方』をGoogleColabで動く限り動かしてみた
『Pythonによる ai・機械学習・深層学習アプリのつくり方』をGoogleColabで動く限り動かしてみた『Pythonによる ai・機械学習・深層学習アプリのつくり方』をGoogleColabで動く限り動かしてみた
『Pythonによる ai・機械学習・深層学習アプリのつくり方』をGoogleColabで動く限り動かしてみた
Takehiro Eguchi
 
20111206 GLT vol.40
20111206 GLT vol.4020111206 GLT vol.40
20111206 GLT vol.40
kashew_nuts
 

La actualidad más candente (20)

Sphinxを用いたBiopythonチュートリアル翻訳
Sphinxを用いたBiopythonチュートリアル翻訳Sphinxを用いたBiopythonチュートリアル翻訳
Sphinxを用いたBiopythonチュートリアル翻訳
 
Libqi unityの紹介など
Libqi unityの紹介などLibqi unityの紹介など
Libqi unityの紹介など
 
Seq2Seqでボットづくり
Seq2SeqでボットづくりSeq2Seqでボットづくり
Seq2Seqでボットづくり
 
深層学習ライブラリのプログラミングモデル
深層学習ライブラリのプログラミングモデル深層学習ライブラリのプログラミングモデル
深層学習ライブラリのプログラミングモデル
 
Python エンジニアの作り方 2011.08 #pyconjp
Python エンジニアの作り方 2011.08 #pyconjpPython エンジニアの作り方 2011.08 #pyconjp
Python エンジニアの作り方 2011.08 #pyconjp
 
本気でPythonで宛名書きした話
本気でPythonで宛名書きした話本気でPythonで宛名書きした話
本気でPythonで宛名書きした話
 
農業とITをOSSで
農業とITをOSSで農業とITをOSSで
農業とITをOSSで
 
Python3と向かい合ってみる
Python3と向かい合ってみるPython3と向かい合ってみる
Python3と向かい合ってみる
 
Python入門者の集い #6 Lightning Talk
Python入門者の集い #6 Lightning Talk Python入門者の集い #6 Lightning Talk
Python入門者の集い #6 Lightning Talk
 
Deep Learningライブラリ 色々つかってみた感想まとめ
Deep Learningライブラリ 色々つかってみた感想まとめDeep Learningライブラリ 色々つかってみた感想まとめ
Deep Learningライブラリ 色々つかってみた感想まとめ
 
モバイルバックエンドもPythonでヨーソロー!
モバイルバックエンドもPythonでヨーソロー!モバイルバックエンドもPythonでヨーソロー!
モバイルバックエンドもPythonでヨーソロー!
 
Python東海の紹介.py
Python東海の紹介.pyPython東海の紹介.py
Python東海の紹介.py
 
Burp Suite Japanユーザグループ紹介
Burp Suite Japanユーザグループ紹介Burp Suite Japanユーザグループ紹介
Burp Suite Japanユーザグループ紹介
 
Pyenvで幸せになろう.py
Pyenvで幸せになろう.pyPyenvで幸せになろう.py
Pyenvで幸せになろう.py
 
あひる焼きの歴史 ver0.1
あひる焼きの歴史 ver0.1あひる焼きの歴史 ver0.1
あひる焼きの歴史 ver0.1
 
14対話bot発表資料
14対話bot発表資料14対話bot発表資料
14対話bot発表資料
 
簡易TRPG向けチャットツールOnset!
簡易TRPG向けチャットツールOnset!簡易TRPG向けチャットツールOnset!
簡易TRPG向けチャットツールOnset!
 
Cythonやってみた!
Cythonやってみた!Cythonやってみた!
Cythonやってみた!
 
『Pythonによる ai・機械学習・深層学習アプリのつくり方』をGoogleColabで動く限り動かしてみた
『Pythonによる ai・機械学習・深層学習アプリのつくり方』をGoogleColabで動く限り動かしてみた『Pythonによる ai・機械学習・深層学習アプリのつくり方』をGoogleColabで動く限り動かしてみた
『Pythonによる ai・機械学習・深層学習アプリのつくり方』をGoogleColabで動く限り動かしてみた
 
20111206 GLT vol.40
20111206 GLT vol.4020111206 GLT vol.40
20111206 GLT vol.40
 

Destacado

こわくない型クラス
こわくない型クラスこわくない型クラス
こわくない型クラス
Kota Mizushima
 

Destacado (14)

Python/Bottle for Kubo Semi 2014
Python/Bottle for Kubo Semi 2014Python/Bottle for Kubo Semi 2014
Python/Bottle for Kubo Semi 2014
 
Python入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニングPython入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニング
 
~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-
~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-
~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-
 
こわくない型クラス
こわくない型クラスこわくない型クラス
こわくない型クラス
 
CordovaでAngularJSアプリ開発
CordovaでAngularJSアプリ開発CordovaでAngularJSアプリ開発
CordovaでAngularJSアプリ開発
 
Scalaで型クラス入門
Scalaで型クラス入門Scalaで型クラス入門
Scalaで型クラス入門
 
Micro Python で組み込み Python
Micro Python で組み込み PythonMicro Python で組み込み Python
Micro Python で組み込み Python
 
bottleで始めるWEBアプリの最初の一歩
bottleで始めるWEBアプリの最初の一歩bottleで始めるWEBアプリの最初の一歩
bottleで始めるWEBアプリの最初の一歩
 
TypeScriptで書くAngularJS @ GDG神戸2014.8.23
TypeScriptで書くAngularJS @ GDG神戸2014.8.23TypeScriptで書くAngularJS @ GDG神戸2014.8.23
TypeScriptで書くAngularJS @ GDG神戸2014.8.23
 
PyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングPyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミング
 
Pythonによるwebアプリケーション入門 - Django編-
Pythonによるwebアプリケーション入門 - Django編- Pythonによるwebアプリケーション入門 - Django編-
Pythonによるwebアプリケーション入門 - Django編-
 
決定木学習
決定木学習決定木学習
決定木学習
 
TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)
TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)
TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)
 
TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。
 

Similar a Python3でwebアプリ

Python Kyoto study
Python Kyoto studyPython Kyoto study
Python Kyoto study
Naoya Inada
 
BPStudy#54 そろそろPython3
BPStudy#54 そろそろPython3BPStudy#54 そろそろPython3
BPStudy#54 そろそろPython3
Atsushi Odagiri
 
Python2と3の互換性問題に立ち向かうときにまずやること
Python2と3の互換性問題に立ち向かうときにまずやることPython2と3の互換性問題に立ち向かうときにまずやること
Python2と3の互換性問題に立ち向かうときにまずやること
kiki utagawa
 
PythonistaがOCamlを実用する方法
PythonistaがOCamlを実用する方法PythonistaがOCamlを実用する方法
PythonistaがOCamlを実用する方法
Yosuke Onoue
 
Python札幌201406
Python札幌201406Python札幌201406
Python札幌201406
Shinya Okano
 

Similar a Python3でwebアプリ (20)

20220615_Visual_Programing_IoTLT_vol11_kitazaki_v1.pdf
20220615_Visual_Programing_IoTLT_vol11_kitazaki_v1.pdf20220615_Visual_Programing_IoTLT_vol11_kitazaki_v1.pdf
20220615_Visual_Programing_IoTLT_vol11_kitazaki_v1.pdf
 
Python Kyoto study
Python Kyoto studyPython Kyoto study
Python Kyoto study
 
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python
 
LLdeade Python Language Update
LLdeade Python Language UpdateLLdeade Python Language Update
LLdeade Python Language Update
 
cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列)
cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列) cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列)
cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列)
 
EtherCATやPROFINETを OPC UAで接続してみた
EtherCATやPROFINETを OPC UAで接続してみたEtherCATやPROFINETを OPC UAで接続してみた
EtherCATやPROFINETを OPC UAで接続してみた
 
Python パッケージの影響を歴史から理解してみよう!
Python パッケージの影響を歴史から理解してみよう!Python パッケージの影響を歴史から理解してみよう!
Python パッケージの影響を歴史から理解してみよう!
 
Python界隈の翻訳プロジェクト
Python界隈の翻訳プロジェクトPython界隈の翻訳プロジェクト
Python界隈の翻訳プロジェクト
 
Python32 pyhackathon-201011
Python32 pyhackathon-201011Python32 pyhackathon-201011
Python32 pyhackathon-201011
 
210728 mpy
210728 mpy210728 mpy
210728 mpy
 
BPStudy#54 そろそろPython3
BPStudy#54 そろそろPython3BPStudy#54 そろそろPython3
BPStudy#54 そろそろPython3
 
osakapy 2014.05 LT
osakapy 2014.05 LTosakapy 2014.05 LT
osakapy 2014.05 LT
 
Python × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack botPython × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack bot
 
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
 
Python2と3の互換性問題に立ち向かうときにまずやること
Python2と3の互換性問題に立ち向かうときにまずやることPython2と3の互換性問題に立ち向かうときにまずやること
Python2と3の互換性問題に立ち向かうときにまずやること
 
MicroPythonのCモジュールを作ってみる
MicroPythonのCモジュールを作ってみるMicroPythonのCモジュールを作ってみる
MicroPythonのCモジュールを作ってみる
 
PythonistaがOCamlを実用する方法
PythonistaがOCamlを実用する方法PythonistaがOCamlを実用する方法
PythonistaがOCamlを実用する方法
 
Python札幌201406
Python札幌201406Python札幌201406
Python札幌201406
 
Apilecture for 2014/02/22 at shannonlab
Apilecture for 2014/02/22 at shannonlabApilecture for 2014/02/22 at shannonlab
Apilecture for 2014/02/22 at shannonlab
 
YOLO V3で独自データセットを学習させて物体検出 / Yolo V3 with your own dataset
YOLO V3で独自データセットを学習させて物体検出 / Yolo V3 with your own datasetYOLO V3で独自データセットを学習させて物体検出 / Yolo V3 with your own dataset
YOLO V3で独自データセットを学習させて物体検出 / Yolo V3 with your own dataset
 

Más de Atsushi Odagiri

Sqlalchemy sqlの錬金術
Sqlalchemy  sqlの錬金術Sqlalchemy  sqlの錬金術
Sqlalchemy sqlの錬金術
Atsushi Odagiri
 
パッケージングの今
パッケージングの今パッケージングの今
パッケージングの今
Atsushi Odagiri
 
パッケージングの今と未来
パッケージングの今と未来パッケージングの今と未来
パッケージングの今と未来
Atsushi Odagiri
 
パッケージングの今と未来
パッケージングの今と未来パッケージングの今と未来
パッケージングの今と未来
Atsushi Odagiri
 
Pyconjp2012 memory-of-europython
Pyconjp2012 memory-of-europythonPyconjp2012 memory-of-europython
Pyconjp2012 memory-of-europython
Atsushi Odagiri
 
What makes pyramid unique
What makes pyramid uniqueWhat makes pyramid unique
What makes pyramid unique
Atsushi Odagiri
 
エキPy lt repoze.whoの紹介
エキPy lt repoze.whoの紹介エキPy lt repoze.whoの紹介
エキPy lt repoze.whoの紹介
Atsushi Odagiri
 

Más de Atsushi Odagiri (20)

みんなのPython勉強会#77 パッケージングしよう
みんなのPython勉強会#77 パッケージングしようみんなのPython勉強会#77 パッケージングしよう
みんなのPython勉強会#77 パッケージングしよう
 
async/await の向こう側 PyCon Kyushu 2022
async/await の向こう側 PyCon Kyushu 2022async/await の向こう側 PyCon Kyushu 2022
async/await の向こう側 PyCon Kyushu 2022
 
パッケージングの呼び声 Python Charity Talks in Japan 2021.02
パッケージングの呼び声 Python Charity Talks in Japan 2021.02パッケージングの呼び声 Python Charity Talks in Japan 2021.02
パッケージングの呼び声 Python Charity Talks in Japan 2021.02
 
eggとはなんだったのか 栄光のsetuptools
eggとはなんだったのか 栄光のsetuptoolseggとはなんだったのか 栄光のsetuptools
eggとはなんだったのか 栄光のsetuptools
 
pyconjp 2019 LT 今日のsetuptools
pyconjp 2019 LT 今日のsetuptoolspyconjp 2019 LT 今日のsetuptools
pyconjp 2019 LT 今日のsetuptools
 
Pythonでの開発を効率的に進めるためのツール設定
Pythonでの開発を効率的に進めるためのツール設定Pythonでの開発を効率的に進めるためのツール設定
Pythonでの開発を効率的に進めるためのツール設定
 
Pythonとパッケージングと私
Pythonとパッケージングと私Pythonとパッケージングと私
Pythonとパッケージングと私
 
Python3 移行への軌跡
Python3 移行への軌跡Python3 移行への軌跡
Python3 移行への軌跡
 
パッケージングを支える技術 pyconjp2016
パッケージングを支える技術 pyconjp2016パッケージングを支える技術 pyconjp2016
パッケージングを支える技術 pyconjp2016
 
Sqlalchemy sqlの錬金術
Sqlalchemy  sqlの錬金術Sqlalchemy  sqlの錬金術
Sqlalchemy sqlの錬金術
 
Clack meetup #1 lt
Clack meetup #1 ltClack meetup #1 lt
Clack meetup #1 lt
 
Pyramid入門
Pyramid入門Pyramid入門
Pyramid入門
 
パッケージングの今
パッケージングの今パッケージングの今
パッケージングの今
 
パッケージングの今と未来
パッケージングの今と未来パッケージングの今と未来
パッケージングの今と未来
 
パッケージングの今と未来
パッケージングの今と未来パッケージングの今と未来
パッケージングの今と未来
 
Bplt11 form alchemy
Bplt11 form alchemyBplt11 form alchemy
Bplt11 form alchemy
 
Pyconjp2012 memory-of-europython
Pyconjp2012 memory-of-europythonPyconjp2012 memory-of-europython
Pyconjp2012 memory-of-europython
 
What makes pyramid unique
What makes pyramid uniqueWhat makes pyramid unique
What makes pyramid unique
 
エキPy lt repoze.whoの紹介
エキPy lt repoze.whoの紹介エキPy lt repoze.whoの紹介
エキPy lt repoze.whoの紹介
 
World plonedaylt
World plonedayltWorld plonedaylt
World plonedaylt
 

Python3でwebアプリ