Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
DjangoとPyramidで同じアプリ作った話.pdf
Search
mizzsugar
April 10, 2019
Programming
0
2.4k
DjangoとPyramidで同じアプリ作った話.pdf
mizzsugar
April 10, 2019
Tweet
Share
More Decks by mizzsugar
See All by mizzsugar
厳しさとゆるさの間で迷う人に捧げる個人開発記
mizzsugar
0
1
SQLModel入門〜クエリと型〜
mizzsugar
1
530
フルリモート向いてないと思っていた私が、なんだかんだ健やかに 1年半フルリモート出来ている話
mizzsugar
0
110
Djangoでのプロジェクトだって型ヒントを運用出来る!
mizzsugar
4
8.2k
「動くものは作れる」の一歩先へ 〜「自走プログラマー」の紹介〜
mizzsugar
0
520
pytestの第一歩 〜「テスト駆動Python」の紹介〜
mizzsugar
3
310
データ分析ツール開発でpoetryを使う選択肢
mizzsugar
1
1.1k
unittest.mockを使ってテストを書こう
mizzsugar
5
6.2k
変数に変数を代入したら?
mizzsugar
0
2.5k
Other Decks in Programming
See All in Programming
CI改善もDatadogとともに
taumu
0
200
React 19アップデートのために必要なこと
uhyo
8
1.5k
Serverless Rust: Your Low-Risk Entry Point to Rust in Production (and the benefits are huge)
lmammino
1
150
データベースのオペレーターであるCloudNativePGがStatefulSetを使わない理由に迫る
nnaka2992
0
230
Django NinjaによるAPI開発の効率化とリプレースの実践
kashewnuts
1
260
生成AIで加速するテスト実装 - ロリポップ for Gamersの事例と 生成AIエディタの活用
kinosuke01
0
120
15分で学ぶDuckDBの可愛い使い方 DuckDBの最近の更新
notrogue
3
520
Go 1.24でジェネリックになった型エイリアスの紹介
syumai
2
290
Ça bouge du côté des animations CSS !
goetter
2
150
1年目の私に伝えたい!テストコードを怖がらなくなるためのヒント/Tips for not being afraid of test code
push_gawa
1
610
CloudNativePGを布教したい
nnaka2992
0
110
なぜイベント駆動が必要なのか - CQRS/ESで解く複雑系システムの課題 -
j5ik2o
14
4.7k
Featured
See All Featured
4 Signs Your Business is Dying
shpigford
182
22k
Music & Morning Musume
bryan
46
6.4k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2.1k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.7k
Producing Creativity
orderedlist
PRO
344
40k
The Pragmatic Product Professional
lauravandoore
32
6.4k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
640
Dealing with People You Can't Stand - Big Design 2015
cassininazir
366
25k
How GitHub (no longer) Works
holman
314
140k
Measuring & Analyzing Core Web Vitals
bluesmoon
6
260
Side Projects
sachag
452
42k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Transcript
DjangoとPyramidで 同じアプリ作った話 @mizzsugar0425
Who am I?? ・平成6年生まれ ・HRシステムのヘルプデスク(Java)→Pythonプログラマー ・業務ではDjangoで開発 ・最近はIteratorでメモリ節約するのが好きです ・コーヒーは豆から作ります ・自転車乗るのが好きです
昨年末、団体用注文アプリ作りました。 お弁当や団体用の 一人の人が何十人もの人の注文を紙でメモして電卓で金額計算して 注文しているのを見て、これは辛いと思い作りました。 Django製です。 https://curry.sugar-code.space/
Django以外のフレームワークで作ったら?
Djangoのようなフルスタックでないフレーム ワークで作ったら? 作ってみよう!
Pyramid使いました。 ・PythonWeb開発フレームワーク ・「小さく、速く、堅実」 ・あまり資料ないのでやってみた
もっとも簡単なPyramidアプリケーション 公式チュートリアルより http://docs.pylonsproject.jp/projects/pyramid-doc-ja/en/latest/
ここで謝罪・・・ PyramidはHTTPリクエスト・レスポンスのみを扱うフレームワークです。 Djangoでやってくれるような認証やデータベースとの接続などは他のフレームワーク でやっています。 なので、タイトルは厳密にいうと でした_(._.)_ DjangoとPyramid+@で 同じアプリ作った話
使用技術比較 ・Django ・PostgreSQL ・Docker ・jQuey ・Pyramid ・PostgreSQL ・Orator ・Pytest ・Docker
・LXC ・Nuxt.js Django Pyramid+@
使用技術比較 ・Django ・PostgreSQL ・Docker ・jQuey ・Pyramid ・PostgreSQL ・Orator ・Pytest ・Docker
・LXC ・Nuxt.js Django Pyramid+@ Django HTTPリクエスト、レ スポンス クエリ発行 テスト
※今回の発表はViewレイヤーに 焦点を当てます。
ルーティング(Django)
ルーティング(Django) View関数の中で if request.method == ‘GET’: … のようにリクエストメソッドによる 処理の振り分けをします。
ルーティング(Django) path(pattern, view, name) pattern=ルートのパターン(ex. /api/hello)指定 view=そのルートにひもづく view関数 name=ルートの名前(uniqueでないと いけない,
not required)
ルーティング(Pyramid) add_route(name, pattern) name=ルートの名前(uniqueでないといけな い, required) pattern=ルートのパターン(ex. /api/hello) を指定
ルーティング(Pyramid) add_view(view, route_name, renderer, request_method) view=view関数 route_name=add_routeで設定したルートの名前 renderer= request_method=そのview関数のリクエストメソッド
View(Django) URLで指定したパラメータを引数とする パラメータなしでリクエストを送ると 自動で404ページが表示される (DEBUG=Falseの場合) View関数内でリクエストメソッドによる 処理の振り分け
View(Django) 〜class-based viewの紹介〜 class内のdefで リクエストメソッドごと の処理を振り分ける
View(Django) 〜class-based viewの紹介〜 とあるモデルの 登録・更新用の フォームを作成し・・・ ModelFormの場 合、 バリデーションは 基本的に
モデルに定義した 通りにやってくれ る。カスタマイズも 可能。
View(Django) 〜class-based viewの紹介〜 たった四行で登録画面の View が・・・ エラーメッセージの表示や DBへの登録はよしなに やってくれます。
View(Pyramid) request.matchdict[parameter] routingで設定したパラメータ request.matchdict[‘b ody’][parameter] POSTで送られたリクエスト
View(Pyramid) 〜デコレータの紹介〜 Pyramidでは @view_config()というデコレータをview関数につけて nameとrouteを指定することもできる カスタマイズしたview_configを作成 することも可能
設定の扱い(Django) settingsモジュールに設 定されている変数は どこからでもアクセス可 能。つまり・・・
設定の扱い(Django) グローバル変数たくさん! モジュールレベルでの カプセル化ができないPythonの世界では ちょっと危険かも・・・
設定の扱い(Pyramid)
設定の扱い(Pyramid) add_request_method(callable=None, name=None, property=False, reify=False) リクエストオブジェクトにメソッドまたはプロパティを加えるメソッド。 例えばOratorの場合、DB接続するインスタンスを返すメソッドを add_request_methodに追加しています。
Viewのテスト(Django)
Viewのテスト(Django) Clientインスタンスに postメソッドを使用するこ とでpostリクエストを送り ます。 ちなみに、getメソッドの 場合は get(route)を利用。 テスト用のクライアント 第一引数のルートに
ひもづくview関数を 呼び出します。
Viewのテスト(Pyramid)
Viewのテスト(Pyramid) リクエストの内容を追加 テストしたいView関数を実行 テスト用の リクエストイン スタンス
Pyramid開発で苦戦した点 ・Djangoほどよしなにやってくれない ・View周り以外は他のフレームワークを利用しないといけないのでDjangoと比べると 学習コストがかかる ・Djangoは割と「こうあるべき」というの明示されているが、Pyramidにはないので実 装時に判断に迷うことも
個人的にPyramidの好きな点 ・request.add_method良い ・ちょっとした計算結果をモジュール一つでWEBに表示させるのが出来て楽 ・疎結合なアプリケーションを作りやすい ・viewのテスト実行が早い (Djangoはテストのたびにテスト用DBを生成するため) ※ --keepdbオプションで2回目以降のDB作り直しは防げるけどViewだけテストしたい場合は遅い(^^;
Django以外のフレームワークでWeb開発した いDjangoerへのアドバイス? ・「Djangoでは〜ができるのに」という考えは捨てましょう!! (比較するにはDjangoはあまりにも手厚すぎる) ・Djangoやってたら「車輪の再発明」に思えるようなことをすることもあるかも・・・ それも 楽しみましょう!! 最後に・・・
ありがとうございました!!