djangoフレームワークの紹介
TRANSCRIPT
![Page 1: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/1.jpg)
Djangoフレームワークの紹介
OSC2016北海道
2016/06/18
![Page 2: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/2.jpg)
お前、誰よ
tokibito (岡野 真也)
大阪→和歌山→北海道→東京
Pythonを使って仕事してます
株式会社ビープラウド
![Page 3: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/3.jpg)
Django
![Page 4: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/4.jpg)
Djangoとは
「じゃんご」と読みます
Webアプリケーションフレームワーク
Python製
オープンソース
BSDライセンス
最新バージョン
1.9.7(2016/06)
![Page 5: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/5.jpg)
Webアプリケーション?
![Page 6: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/6.jpg)
Webアプリケーションって?
Webブラウザでインターネットを介して利用できるアプリケーション
例えば?
ブログ
Googleマップ
YouTube
その他いろいろ…
![Page 7: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/7.jpg)
Webアプリケーションのイメージ
インターネット
パソコン
(IE, Chrome, Firefox …)
モバイル端末
(Android Chrome, iOS Safari …)
Webサーバー(HTTPサーバー)
データベース
![Page 8: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/8.jpg)
Python?
![Page 9: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/9.jpg)
Pythonについて
プログラミング言語
オープンソース
オブジェクト指向
動的型付け
クロスプラットフォーム対応
対話インターフェース
最新バージョンは Python 3.5
![Page 10: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/10.jpg)
Pythonのコード
def main(values):
for number in values:
print(number * number) # numberの二乗を表示
if __name__ == 'main':
main()
# Pythonでは、インデント(字下げ)の位置が変わるまでの範囲が1つのブロックとなります。
main.py
![Page 11: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/11.jpg)
Djangoとは
「じゃんご」と読みます
Webアプリケーションフレームワーク
Python製
オープンソース
BSDライセンス
最新バージョン
1.9.7(2016/06)
![Page 12: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/12.jpg)
Webアプリケーションフレームワーク?
![Page 13: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/13.jpg)
Webアプリケーションフレームワークって?
Webアプリケーションの開発に使う外枠
よく使われるような機能をそろえてくれている
開発者はアプリケーションコードの記述に集中できる
他のWebアプリケーションフレームワーク
Ruby on Rails (Ruby)
Symfony (PHP)
![Page 14: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/14.jpg)
Webアプリケーションフレームワークを使うところ
インターネット
パソコン
(IE, Chrome, Firefox …)
モバイル端末
(Android Chrome, iOS Safari …)
Webサーバー(HTTPサーバー)
データベース
↑このあたりで使います
![Page 15: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/15.jpg)
Djangoを使ってみるには?
Pythonをインストールする
OSのパッケージ管理ツールかインストーラーで。
Djangoをインストールする
virtualenv (venv)でPython環境を作ってインストール
pip install Django
![Page 16: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/16.jpg)
手っ取り早く伝えるためにデモ
https://github.com/tokibito/django-example-todo
https://goo.gl/xyjEcd
![Page 17: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/17.jpg)
Djangoでの開発の流れ
プロジェクトを作る
データベース接続やタイムゾーンなどの各種設定
アプリケーションを作る
startapp
models.py
urls.pyとviews.py
テンプレート
動作確認
アプリケーションを作る(繰り返し..)
![Page 18: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/18.jpg)
デモでやったこと
プロジェクトの作成
各種設定
アプリケーション作成
models.py
admin.py
views.py
urls.py
テンプレート
forms.py
![Page 19: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/19.jpg)
プロジェクトの作成
(venv)$ django-admin startproject myproject
shell
![Page 20: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/20.jpg)
開発サーバーの起動
(venv)$ cd myproject
(venv) myproject/ $ python manage.py runserver
shell
![Page 21: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/21.jpg)
データベース設定
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
# sqlite3 以外に、postgres, mysql, oracle を指定可能
# サードパーティでSQLServerやFirebirdなども使える
myproject/settings.py
![Page 22: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/22.jpg)
データベース設定
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
# sqlite3 以外に、postgres, mysql, oracle を指定可能
# サードパーティでSQLServerやFirebirdなども使える
myproject/settings.py
![Page 23: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/23.jpg)
言語、タイムゾーン設定
# 管理画面のUIやエラーメッセージなどが日本語になる
LANGUAGE_CODE = 'ja'
# 現在日時の扱いなどを日本時間にする
TIME_ZONE = 'Asia/Tokyo'
myproject/settings.py
![Page 24: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/24.jpg)
アプリケーション作成
(venv) myproject/ $ python manage.py startapp todo
# todoという名前のアプリケーションが作られる
# Djangoのアプリケーションは、Pythonモジュールと同じ形式
shell
![Page 25: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/25.jpg)
アプリケーション有効化
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'todo', # アプリケーション名を追記
]
myproject/settings.py
![Page 26: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/26.jpg)
モデルの作成
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
![Page 27: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/27.jpg)
管理画面への登録
from django.contrib import admin
from .models import Todo
# Todoモデルを管理画面に登録
admin.site.register(Todo)
todo/admin.py
![Page 28: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/28.jpg)
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
![Page 29: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/29.jpg)
urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'), # 一覧表示
url(r'^add$', views.add, name='add'), # 追加
url(r'^(?P<pk>¥d+)/edit$', views.edit, name='edit'), # 編集
url(r'^(?P<pk>¥d+)/done$', views.done, name='done'), # 完了
]
todo/urls.py
![Page 30: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/30.jpg)
テンプレート
<html><body>
<ul>
{% for todo in todo_list %}
<li>
{{ todo.name }}
</li>
{% endfor %}
</ul>
</body><html>
todo/templates/index.html
![Page 31: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/31.jpg)
Djangoのアーキテクチャ
![Page 32: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/32.jpg)
管理画面
ユーザー認証
開発用サーバー
ORM
キャッシュシステム
テンプレートエンジン
GIS
セッション
管理コマンド
データベースマイグレーション
ユニットテストフレームワーク
プロジェクトテンプレート
フォームウィジェット
URLディスパッチャー
再利用可能なアプリケーション
ストレージシステム
セキュリティミドルウェア
フラッシュメッセージ配信
サイトマップフレームワーク
静的ファイル配信
国際化
メール送信フレームワーク
プロジェクト設定
Djangoの機能
![Page 33: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/33.jpg)
Djangoフレームワークの苦手なところ
複雑なSQL
SQLAlchemyを検討
JavaScriptを含むフォーム
クライアント側で独立させるか、仕様を妥協
![Page 34: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/34.jpg)
サードパーティ
Djangoの機能だけでは足りない場合
サードパーティのモジュールもたくさんある
https://www.djangopackages.com/
例えば..
django-extensions
django-debugtoolbar
django-restframework
Haystack
python-social-auth
![Page 35: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/35.jpg)
Djangoの安定性
安定してます
Djangoはフルスタックフレームワーク
サードパーティのライブラリへの依存が無い
依存ライブラリによって不安定になることはない
十分にテストされている
フレームワークの自動テスト
http://djangoci.com/
APIの互換性ポリシー
DeprecationWarningが出るようになってから1つ次のバージョンまでは維持される
https://docs.djangoproject.com/ja/1.9/misc/api-stability/
![Page 36: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/36.jpg)
Djangoを使っているサービスやプロダクト
Instagram (写真共有サービス)
Horizon (OpenStack Dashboard)
Hue (Hadoop GUI)
Open edX (eラーニング)
その他いろいろ
![Page 37: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/37.jpg)
こんな使い方も…
manage.py inspectdb
データベースからモデルクラスのコードを生成
django.contrib.admin
モデルクラスを登録して管理画面作成
→→簡易データベース編集アプリを作れる!
データベースPythonコード
(Djangoモデルクラス) Django管理画面
inspectdb 管理画面へ登録
![Page 38: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/38.jpg)
最近のアップデート
1.8 (2015/04)
復数のテンプレートエンジンをサポート
長期サポートバージョン(以前のLTSは1.4)
Python 3.5正式サポート
1.9 (2015/12)
管理画面のスタイルを刷新
パスワード検証機能の追加
![Page 39: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/39.jpg)
ドキュメント
まずはオフィシャルドキュメント
https://docs.djangoproject.com/en/1.9/
チュートリアルは日本語翻訳あり
https://docs.djangoproject.com/ja/1.9/
参考になるチュートリアル
http://eiry.bitbucket.org/
本
https://www.twoscoopspress.com/products/two-scoops-of-django-1-8
本は残念ながら和書だと古いものしかないです…
![Page 40: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/40.jpg)
django-ja (日本のユーザーコミュニ
ティ)
リソースやドキュメントの日本語翻訳
http://djangoproject.jp/
事例やイベント情報、アップデート情報など掲載
django-ja (Googleグループ)
質問や相談など
TokyoDjangoMeetup (東京)
もくもく作業
雑談、相談
![Page 41: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/41.jpg)
勉強の進め方
まずはチュートリアルをやってみる
チュートリアルで使われている機能が理解できたら、何か課題を見つけて作ってみる
問題を解決できない場合は、メーリングリストなどで質問する
思う通りにアプリケーションを作れるようになってきたら、テストコードを充実させてみる
テストが書きづらいなら、対象のコードの設計を見直す
デザインパターンなどを適用していくとよい
![Page 42: Djangoフレームワークの紹介](https://reader034.vdocuments.net/reader034/viewer/2022042723/5877ebd11a28ab20088b6109/html5/thumbnails/42.jpg)
Djangoフレームワークを使ってみてね!