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.5k
DjangoとPyramidで同じアプリ作った話.pdf
mizzsugar
April 10, 2019
Tweet
Share
More Decks by mizzsugar
See All by mizzsugar
厳しさとゆるさの間で迷う人に捧げる個人開発記
mizzsugar
0
47
SQLModel入門〜クエリと型〜
mizzsugar
2
1.4k
フルリモート向いてないと思っていた私が、なんだかんだ健やかに 1年半フルリモート出来ている話
mizzsugar
1
160
Djangoでのプロジェクトだって型ヒントを運用出来る!
mizzsugar
4
9k
「動くものは作れる」の一歩先へ 〜「自走プログラマー」の紹介〜
mizzsugar
0
620
pytestの第一歩 〜「テスト駆動Python」の紹介〜
mizzsugar
3
460
データ分析ツール開発でpoetryを使う選択肢
mizzsugar
1
1.2k
unittest.mockを使ってテストを書こう
mizzsugar
5
6.8k
変数に変数を代入したら?
mizzsugar
1
2.6k
Other Decks in Programming
See All in Programming
どんと来い、データベース信頼性エンジニアリング / Introduction to DBRE
nnaka2992
1
270
AI主導でFastAPIのWebサービスを作るときに 人間が構造化すべき境界線
okajun35
0
680
PJのドキュメントを全部Git管理にしたら、一番喜んだのはAIだった
nanaism
0
250
AIに任せる範囲を安全に広げるためにやっていること
fukucheee
0
130
Go1.26 go fixをプロダクトに適用して困ったこと
kurakura0916
0
360
ふつうの Rubyist、ちいさなデバイス、大きな一年
bash0c7
0
800
Windows on Ryzen and I
seosoft
0
240
CSC307 Lecture 13
javiergs
PRO
0
320
モジュラモノリスにおける境界をGoのinternalパッケージで守る
magavel
0
3.5k
Rで始めるML・LLM活用入門
wakamatsu_takumu
0
170
SourceGeneratorのマーカー属性問題について
htkym
0
180
Claude Code の Skill で複雑な既存仕様をすっきり整理しよう
yuichirokato
1
360
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
97
6.5k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
530
Making Projects Easy
brettharned
120
6.6k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Discover your Explorer Soul
emna__ayadi
2
1.1k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
Rails Girls Zürich Keynote
gr2m
96
14k
Designing for humans not robots
tammielis
254
26k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.8k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
1.9k
Prompt Engineering for Job Search
mfonobong
0
180
Color Theory Basics | Prateek | Gurzu
gurzu
0
240
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やってたら「車輪の再発明」に思えるようなことをすることもあるかも・・・ それも 楽しみましょう!! 最後に・・・
ありがとうございました!!