Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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.5k
DjangoとPyramidで同じアプリ作った話.pdf
mizzsugar
April 10, 2019
Tweet
Share
More Decks by mizzsugar
See All by mizzsugar
厳しさとゆるさの間で迷う人に捧げる個人開発記
mizzsugar
0
31
SQLModel入門〜クエリと型〜
mizzsugar
1
1.3k
フルリモート向いてないと思っていた私が、なんだかんだ健やかに 1年半フルリモート出来ている話
mizzsugar
1
150
Djangoでのプロジェクトだって型ヒントを運用出来る!
mizzsugar
4
8.8k
「動くものは作れる」の一歩先へ 〜「自走プログラマー」の紹介〜
mizzsugar
0
600
pytestの第一歩 〜「テスト駆動Python」の紹介〜
mizzsugar
3
410
データ分析ツール開発でpoetryを使う選択肢
mizzsugar
1
1.2k
unittest.mockを使ってテストを書こう
mizzsugar
5
6.6k
変数に変数を代入したら?
mizzsugar
1
2.6k
Other Decks in Programming
See All in Programming
これだけで丸わかり!LangChain v1.0 アップデートまとめ
os1ma
6
1.4k
著者と進める!『AIと個人開発したくなったらまずCursorで要件定義だ!』
yasunacoffee
0
120
DSPy Meetup Tokyo #1 - はじめてのDSPy
masahiro_nishimi
1
150
AIコーディングエージェント(skywork)
kondai24
0
130
Navigation 3: 적응형 UI를 위한 앱 탐색
fornewid
1
180
Herb to ReActionView: A New Foundation for the View Layer @ San Francisco Ruby Conference 2025
marcoroth
0
250
Building AI Agents with TypeScript #TSKaigiHokuriku
izumin5210
6
1.2k
分散DBって何者なんだ... Spannerから学ぶRDBとの違い
iwashi623
0
180
Integrating WordPress and Symfony
alexandresalome
0
130
React Native New Architecture 移行実践報告
taminif
1
140
Full-Cycle Reactivity in Angular: SignalStore mit Signal Forms und Resources
manfredsteyer
PRO
0
180
バックエンドエンジニアによる Amebaブログ K8s 基盤への CronJobの導入・運用経験
sunabig
0
140
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.8k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.4k
Practical Orchestrator
shlominoach
190
11k
Documentation Writing (for coders)
carmenintech
76
5.2k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
700
Thoughts on Productivity
jonyablonski
73
5k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
A Modern Web Designer's Workflow
chriscoyier
697
190k
The Cult of Friendly URLs
andyhume
79
6.7k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
36
6.2k
A designer walks into a library…
pauljervisheath
210
24k
Why Our Code Smells
bkeepers
PRO
340
57k
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やってたら「車輪の再発明」に思えるようなことをすることもあるかも・・・ それも 楽しみましょう!! 最後に・・・
ありがとうございました!!