DjangoとPyramidで同じアプリ作った話.pdf
by
mizzsugar
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
DjangoとPyramidで 同じアプリ作った話 @mizzsugar0425
Slide 2
Slide 2 text
Who am I?? ・平成6年生まれ ・HRシステムのヘルプデスク(Java)→Pythonプログラマー ・業務ではDjangoで開発 ・最近はIteratorでメモリ節約するのが好きです ・コーヒーは豆から作ります ・自転車乗るのが好きです
Slide 3
Slide 3 text
昨年末、団体用注文アプリ作りました。 お弁当や団体用の 一人の人が何十人もの人の注文を紙でメモして電卓で金額計算して 注文しているのを見て、これは辛いと思い作りました。 Django製です。 https://curry.sugar-code.space/
Slide 4
Slide 4 text
Django以外のフレームワークで作ったら?
Slide 5
Slide 5 text
Djangoのようなフルスタックでないフレーム ワークで作ったら? 作ってみよう!
Slide 6
Slide 6 text
Pyramid使いました。 ・PythonWeb開発フレームワーク ・「小さく、速く、堅実」 ・あまり資料ないのでやってみた
Slide 7
Slide 7 text
もっとも簡単なPyramidアプリケーション 公式チュートリアルより http://docs.pylonsproject.jp/projects/pyramid-doc-ja/en/latest/
Slide 8
Slide 8 text
ここで謝罪・・・ PyramidはHTTPリクエスト・レスポンスのみを扱うフレームワークです。 Djangoでやってくれるような認証やデータベースとの接続などは他のフレームワーク でやっています。 なので、タイトルは厳密にいうと でした_(._.)_ DjangoとPyramid+@で 同じアプリ作った話
Slide 9
Slide 9 text
使用技術比較 ・Django ・PostgreSQL ・Docker ・jQuey ・Pyramid ・PostgreSQL ・Orator ・Pytest ・Docker ・LXC ・Nuxt.js Django Pyramid+@
Slide 10
Slide 10 text
使用技術比較 ・Django ・PostgreSQL ・Docker ・jQuey ・Pyramid ・PostgreSQL ・Orator ・Pytest ・Docker ・LXC ・Nuxt.js Django Pyramid+@ Django HTTPリクエスト、レ スポンス クエリ発行 テスト
Slide 11
Slide 11 text
※今回の発表はViewレイヤーに 焦点を当てます。
Slide 12
Slide 12 text
ルーティング(Django)
Slide 13
Slide 13 text
ルーティング(Django) View関数の中で if request.method == ‘GET’: … のようにリクエストメソッドによる 処理の振り分けをします。
Slide 14
Slide 14 text
ルーティング(Django) path(pattern, view, name) pattern=ルートのパターン(ex. /api/hello)指定 view=そのルートにひもづく view関数 name=ルートの名前(uniqueでないと いけない, not required)
Slide 15
Slide 15 text
ルーティング(Pyramid) add_route(name, pattern) name=ルートの名前(uniqueでないといけな い, required) pattern=ルートのパターン(ex. /api/hello) を指定
Slide 16
Slide 16 text
ルーティング(Pyramid) add_view(view, route_name, renderer, request_method) view=view関数 route_name=add_routeで設定したルートの名前 renderer= request_method=そのview関数のリクエストメソッド
Slide 17
Slide 17 text
View(Django) URLで指定したパラメータを引数とする パラメータなしでリクエストを送ると 自動で404ページが表示される (DEBUG=Falseの場合) View関数内でリクエストメソッドによる 処理の振り分け
Slide 18
Slide 18 text
View(Django) 〜class-based viewの紹介〜 class内のdefで リクエストメソッドごと の処理を振り分ける
Slide 19
Slide 19 text
View(Django) 〜class-based viewの紹介〜 とあるモデルの 登録・更新用の フォームを作成し・・・ ModelFormの場 合、 バリデーションは 基本的に モデルに定義した 通りにやってくれ る。カスタマイズも 可能。
Slide 20
Slide 20 text
View(Django) 〜class-based viewの紹介〜 たった四行で登録画面の View が・・・ エラーメッセージの表示や DBへの登録はよしなに やってくれます。
Slide 21
Slide 21 text
View(Pyramid) request.matchdict[parameter] routingで設定したパラメータ request.matchdict[‘b ody’][parameter] POSTで送られたリクエスト
Slide 22
Slide 22 text
View(Pyramid) 〜デコレータの紹介〜 Pyramidでは @view_config()というデコレータをview関数につけて nameとrouteを指定することもできる カスタマイズしたview_configを作成 することも可能
Slide 23
Slide 23 text
設定の扱い(Django) settingsモジュールに設 定されている変数は どこからでもアクセス可 能。つまり・・・
Slide 24
Slide 24 text
設定の扱い(Django) グローバル変数たくさん! モジュールレベルでの カプセル化ができないPythonの世界では ちょっと危険かも・・・
Slide 25
Slide 25 text
設定の扱い(Pyramid)
Slide 26
Slide 26 text
設定の扱い(Pyramid) add_request_method(callable=None, name=None, property=False, reify=False) リクエストオブジェクトにメソッドまたはプロパティを加えるメソッド。 例えばOratorの場合、DB接続するインスタンスを返すメソッドを add_request_methodに追加しています。
Slide 27
Slide 27 text
Viewのテスト(Django)
Slide 28
Slide 28 text
Viewのテスト(Django) Clientインスタンスに postメソッドを使用するこ とでpostリクエストを送り ます。 ちなみに、getメソッドの 場合は get(route)を利用。 テスト用のクライアント 第一引数のルートに ひもづくview関数を 呼び出します。
Slide 29
Slide 29 text
Viewのテスト(Pyramid)
Slide 30
Slide 30 text
Viewのテスト(Pyramid) リクエストの内容を追加 テストしたいView関数を実行 テスト用の リクエストイン スタンス
Slide 31
Slide 31 text
Pyramid開発で苦戦した点 ・Djangoほどよしなにやってくれない ・View周り以外は他のフレームワークを利用しないといけないのでDjangoと比べると 学習コストがかかる ・Djangoは割と「こうあるべき」というの明示されているが、Pyramidにはないので実 装時に判断に迷うことも
Slide 32
Slide 32 text
個人的にPyramidの好きな点 ・request.add_method良い ・ちょっとした計算結果をモジュール一つでWEBに表示させるのが出来て楽 ・疎結合なアプリケーションを作りやすい ・viewのテスト実行が早い (Djangoはテストのたびにテスト用DBを生成するため) ※ --keepdbオプションで2回目以降のDB作り直しは防げるけどViewだけテストしたい場合は遅い(^^;
Slide 33
Slide 33 text
Django以外のフレームワークでWeb開発した いDjangoerへのアドバイス? ・「Djangoでは〜ができるのに」という考えは捨てましょう!! (比較するにはDjangoはあまりにも手厚すぎる) ・Djangoやってたら「車輪の再発明」に思えるようなことをすることもあるかも・・・ それも 楽しみましょう!! 最後に・・・
Slide 34
Slide 34 text
ありがとうございました!!