Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Djangoフレームワークの紹介_OSC北海道2019
Search
Shinya Okano
June 01, 2019
Technology
1.1k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Djangoフレームワークの紹介_OSC北海道2019
Shinya Okano
June 01, 2019
More Decks by Shinya Okano
See All by Shinya Okano
プロファイラを使ってPythonアプリをチューニングしよう
tokibito
2
1.5k
Djangoテンプレートエンジンを使いこなそう!
tokibito
0
3.2k
Pythonのデバッガーを使おう
tokibito
1
980
DjangoCongressJP開催レポート
tokibito
0
110
Djangoフレームワークの紹介 OSC2018do
tokibito
0
2.9k
Other Decks in Technology
See All in Technology
Coil3を内部実装から読み解く~キャッシュ戦略とAVIF画像の描画〜/nikkei-tech-talk50
nikkei_engineer_recruiting
0
170
【ゲームメーカーズスクランブル2026】『Shadowverse: Worlds Beyond』UIとアニメーションで実現する最高のユーザー体験を叶えるプロトタイピング
cygames
PRO
1
700
覗いてみよう 関数型ビジュアル言語×2Dグラフィックスの世界
yohyamasaki
0
150
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
16
120k
【データ横丁主催】AI Agentがコンテキストを使って仕事をした後、何が残るのか― 組織の経験を次の判断に引き継ぐ「Agent Memory」
shisyu_gaku
2
260
AI Native Platform Engineering 〜PlatformとAgileで“作る速さ”を“価値”へ〜
uya116
0
480
AWS FinOps Agent 結局何が得意なの?
siromi
0
220
HacobuにおけるFDEとは/登壇資料(戸井田 裕貴)
hacobu
PRO
1
600
Lambda MicroVMsは常駐サーバーの代わりに なるか? Kiro Crew を動かして検証してみた / Kiro Crew on Lambda MicroVMs
k_adachi_01
2
340
IR Today: Theory, Practice, and Agents
dtunkelang
0
250
可視化から始めたAI駆動開発_ochi_ver1.01 / AI-Driven Development Starting with Visualization_ver1.01
yayoi_dd
0
110
VS Code × GitHub Copilot での Fabric 開発
ryomaru0825
1
170
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Balancing Empowerment & Direction
lara
6
1.3k
How GitHub (no longer) Works
holman
316
150k
The Spectacular Lies of Maps
axbom
PRO
1
1.1k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
560
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
390
Designing for Timeless Needs
cassininazir
1
510
The Curse of the Amulet
leimatthew05
3
15k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
66k
We Are The Robots
honzajavorek
0
380
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
850
Test your architecture with Archunit
thirion
2
2.4k
Transcript
Django フレームワークの紹介 OSC2019北海道 2019/06/01
1年ぶりです こんにちは
東京から 来ました
お前、誰よ @tokibito (岡野 真也) 大阪→和歌山→北海道→東京 Pythonを使って仕事してます 株式会社オープンコレクター
django-ja
Django の 紹介
Djangoとは 「じゃんご」と読みます Webアプリケーションフレームワーク Python製 オープンソースソフトウェア
BSDライセンス 最新バージョン 2.2.1(2019/06) 開発: Django Software Foundation (DSF)
どんなことができる?
デモしましょう https://github.com/tokibito/django-example-todo
簡単なToDoアプリ =タスク管理アプリ =やることリスト
管理画面 ユーザー認証 開発用サーバー ORM キャッシュシステム
テンプレートエンジン GIS セッション 管理コマンド データベースマイグレーション ユニットテストフレームワーク プロジェクトテンプレート フォームウィジェット URLディスパッチャー 再利用可能なアプリケーション ストレージシステム セキュリティミドルウェア フラッシュメッセージ配信 サイトマップフレームワーク 静的ファイル配信 国際化 メール送信フレームワーク プロジェクト設定 Djangoの機能
管理画面 ユーザー認証 開発用サーバー ORM キャッシュシステム
テンプレートエンジン GIS セッション 管理コマンド データベースマイグレーション ユニットテストフレームワーク プロジェクトテンプレート フォームウィジェット URLディスパッチャー 再利用可能なアプリケーション ストレージシステム セキュリティミドルウェア フラッシュメッセージ配信 サイトマップフレームワーク 静的ファイル配信 国際化 メール送信フレームワーク プロジェクト設定 Djangoの機能(デモで使用)
Djangoアプリのコード https://developer.mozilla.org/ja/docs/Learn/Server-side/Django/Introduction
Djangoのアーキテクチャ
サードパーティ Djangoの機能だけでは足りない場合 サードパーティのモジュールもたくさんある https://www.djangopackages.com/ 例えば..
django-extensions (コマンド拡張など) django-debugtoolbar (デバッグ) django-restframework (REST API) Haystack (検索エンジン) Wagtail, Mezzanine, cartridge (CMS, E-Commerce)
歴史と実績 アメリカの新聞社が2006年OSSとして公開 13年経ちましたが開発は活発です Python2.3-2.5→2.7-3.6→3.5+ 利用事例
Instagram, Pinterest, OpenStack ググってください(Djangoフレームワークの求人はそこ そこあります) 国内でも規模の大きな事例あります ユーザー数が数万~のシステム DBテーブル数200+ アプリケーションコード10万行+
前回からのアップデート バージョン2.0→2.2 2.1 Python 3.5以上をサポート View
Permission機能(管理画面などで「表示」権限) 2.2 Python 3.5以上をサポート LTS(Long-term support)バージョン(1.11→2.2) モデルの制約の新しい書き方 Constraintクラス
次のバージョン 3.0 2019/12 Python3.6以上サポート MariaDBサポート
3.1 2020/08
ユーザーコミュニティ 日本 Django-ja 主に東京で活動 https://djangoproject.jp/
翻訳 DjangoCongressJP 海外 国や地域単位でローカルコミュニティがある 中心は英語のDjango-users
オススメの資料 オフィシャルドキュメント DjangoGirlsチュートリアル https://tutorial.djangogirls.org/ja/ MDNのDjangoチュートリアル(英語, 翻訳中)
https://developer.mozilla.org/ja/docs/Learn/Server -side/Django
オススメの本 現場で使える Django の教科書《基礎編》 横瀬 明仁(akiyoko)さんの本 現場で使える
Django の教科書《実践編》
Djangoフレームワーク を使ってみてね!
以降、雑多な資料。
Webアプリケーションって? Webブラウザでインターネットを介し て利用できるアプリケーション 例えば? ブログ Twitter
Googleマップ YouTube その他いろいろ…
Webアプリケーションの イメージ インターネット パソコン (IE, Chrome, Firefox …) モバイル端末 (Android
Chrome, iOS Safari …) Webサーバー (HTTPサーバー) データベース
Pythonについて プログラミング言語 オープンソース オブジェクト指向 動的型付け
クロスプラットフォーム対応 対話インターフェース 最新バージョンは Python 3.7
Pythonのコード def main(values): for number in values: print(number * number)
# numberの二乗を表示 if __name__ == '__main__': main() # Pythonでは、インデント(字下げ)の位置が変わるまでの範囲 が1つのブロックとなります。 main.py
Webアプリケーション フレームワークって? Webアプリケーションの開発に使う外枠 よく使われるような機能をそろえてくれている 開発者はアプリケーションコードの記述に集中で きる
他のWebアプリケーションフレームワーク Ruby on Rails (Ruby) Symfony、Laravel (PHP)
Webアプリケーションフ レームワークを使うところ インターネット パソコン (IE, Chrome, Firefox …) モバイル端末 (Android
Chrome, iOS Safari …) Webサーバー (HTTPサーバー) データベース ↑このあたりで使います
Djangoを使ってみるには? Pythonをインストールする OSのパッケージ管理ツールかインストーラーで。 Djangoをインストールする virtualenv (venv)でPython環境を作ってインストール
pip install Django
Djangoでの開発の流れ プロジェクトを作る データベース接続やタイムゾーンなどの各種設定 アプリケーションを作る startapp
models.py urls.pyとviews.py テンプレート 動作確認 アプリケーションを作る(繰り返し..)
デモでやったこと プロジェクトの作成 各種設定 アプリケーション作成 models.py
admin.py views.py urls.py テンプレート forms.py
プロジェクトの作成 (venv)$ django-admin startproject myproject shell
開発サーバーの起動 (venv)$ cd myproject (venv) myproject/ $ python manage.py runserver
shell
データベース設定 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR,
'db.sqlite3'), } } # sqlite3 以外に、postgres, mysql, oracle を指定可能 # サードパーティでSQLServerやFirebirdなども使える myproject/settings.py
言語、タイムゾーン設定 # 管理画面のUIやエラーメッセージなどが日本語になる LANGUAGE_CODE = 'ja' # 現在日時の扱いなどを日本時間にする TIME_ZONE =
'Asia/Tokyo' myproject/settings.py
アプリケーション作成 (venv) myproject/ $ python manage.py startapp todo # todoという名前のアプリケーションが作られる
# Djangoのアプリケーションは、Pythonモジュールと同じ形式 shell
アプリケーション有効化 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles',
'todo', # アプリケーション名を追記 ] myproject/settings.py
モデルの作成 from django.db import models class Todo(models.Model): name = models.CharField("名称",
max_length=50) done = models.BooleanField("完了") created_at = models.DateTimeField( "作成日時", auto_now_add=True) def __str__(self): return self.name todo/models.py
管理画面への登録 from django.contrib import admin from .models import Todo #
Todoモデルを管理画面に登録 admin.site.register(Todo) todo/admin.py
views.py from django.shortcuts import render, redirect, get_object_or_404 from .models import
Todo from .forms import TodoForm def index(request): # GETパラメータに ?all=1 と指定された場合は全件を表示 if request.GET.get('all') == '1': queryset = Todo.objects.all() else: # 特に指定がない場合は未完了のレコードのみ queryset = Todo.objects.filter(done=False) # 作成日時で降順にソート todo_list = queryset.order_by('-created_at') return render(request, 'index.html', {'todo_list': todo_list}) todo/views.py
urls.py (アプリケーション) from django.urls import path from . import views
urlpatterns = [ path('', views.index, name='index'), # 一覧表示 path('add', views.add, name='add'), # 追加 path('<int:pk>/edit', views.edit, name='edit'), # 編集 path('<int:pk>/done', views.done, name='done'), # 完了 ] todo/urls.py
urls.py (プロジェクト) from django.contrib import admin from django.urls import path,
include urlpatterns = [ path('admin/', admin.site.urls), # 管理画面 path('', include('todo.urls')), # todoアプリケーションの urls.pyを含める ] myproject/urls.py
テンプレート <html><body> <ul> {% for todo in todo_list %} <li>
{{ todo.name }} </li> {% endfor %} </ul> </body><html> todo/templates/index.html
Djangoフレームワークの苦 手なところ 複雑なSQL SQLAlchemyを検討 JavaScriptを含むフォーム クライアント側で独立させるか、仕様を妥協
Djangoの安定性 安定してます Djangoはフルスタックフレームワーク サードパーティのライブラリへの依存が無い 依存ライブラリによって不安定になることはない
十分にテストされている フレームワークの自動テスト https://djangoci.com/ APIの互換性ポリシー DeprecationWarningが出るようになってから1つ次のバー ジョンまでは維持される https://docs.djangoproject.com/ja/2.0/misc/api- stability/
Djangoを使っている サービスやプロダクト Instagram (写真共有サービス) Horizon (OpenStack Dashboard)
Hue (Hadoop GUI) Open edX (eラーニング) その他いろいろ
こんな使い方も… manage.py inspectdb データベースからモデルクラスのコードを生成 django.contrib.admin モデルクラスを登録して管理画面作成
→→簡易データベース編集アプリを作れる! データベース Pythonコード (Djangoモデルクラス) Django管理画面 inspectdb 管理画面へ登録
ドキュメント まずはオフィシャルドキュメント https://docs.djangoproject.com/en/2.2/ チュートリアルは日本語翻訳あり https://docs.djangoproject.com/ja/2.2/
参考になるチュートリアル DjangoGirlsチュートリアル MDNのDjangoチュートリアル(英語, 翻訳中) https://developer.mozilla.org/ja/docs/Learn/Server- side/Django 本 akiyokoさんの本がオススメ
django-ja (日本のユーザーコミュニ ティ) リソースやドキュメントの日本語翻訳 https://djangoproject.jp/ 事例やイベント情報、アップデート情報など掲載
django-ja (Googleグループ) 質問や相談など TokyoDjangoMeetup (東京) もくもく作業 雑談、相談 DjangoCongressJP カンファレンス
勉強の進め方 まずはチュートリアルをやってみる チュートリアルで使われている機能が理解できたら、 何か課題を見つけて作ってみる 問題を解決できない場合は、メーリングリストなどで 質問する
思う通りにアプリケーションを作れるようになってき たら、テストコードを充実させてみる テストが書きづらいなら、対象のコードの設計を見直す