Django
フレームワークの紹介
OSC2016北海道
2016/06/18
お前、誰よ
tokibito (岡野 真也)
 大阪→和歌山→北海道→東京
 Pythonを使って仕事してます
 株式会社ビープラウド
Django
Djangoとは
 「じゃんご」と読みます
 Webアプリケーションフレームワーク
 Python製
 オープンソース
 BSDライセンス
 最新バージョン
 1.9.7(2016/06)
Webアプリケーション?
Webアプリケーションって?
 Webブラウザでインターネットを介し
て利用できるアプリケーション
 例えば?
 ブログ
 Twitter
 Googleマップ
 YouTube
 その他いろいろ…
Webアプリケーションの
イメージ
インターネット
パソコン
(IE,Chrome, Firefox …)
モバイル端末
(Android Chrome, iOS Safari …)
Webサーバー
(HTTPサーバー)
データベース
Python?
Pythonについて
 プログラミング言語
 オープンソース
 オブジェクト指向
 動的型付け
 クロスプラットフォーム対応
 対話インターフェース
 最新バージョンは Python 3.5
Pythonのコード
def main(values):
for number in values:
print(number * number) # numberの二乗を表示
if __name__ == 'main':
main()
# Pythonでは、インデント(字下げ)の位置が変わるまでの範囲
が1つのブロックとなります。
main.py
Djangoとは
 「じゃんご」と読みます
 Webアプリケーションフレームワーク
 Python製
 オープンソース
 BSDライセンス
 最新バージョン
 1.9.7(2016/06)
Webアプリケーション
フレームワーク?
Webアプリケーション
フレームワークって?
 Webアプリケーションの開発に使う外枠
 よく使われるような機能をそろえてくれている
 開発者はアプリケーションコードの記述に集中で
きる
 他のWebアプリケーションフレームワーク
 Ruby on Rails (Ruby)
 Symfony (PHP)
Webアプリケーションフ
レームワークを使うところ
インターネット
パソコン
(IE,Chrome, Firefox …)
モバイル端末
(Android Chrome, iOS Safari …)
Webサーバー
(HTTPサーバー)
データベース
↑このあたりで使います
Djangoを使ってみるには?
 Pythonをインストールする
 OSのパッケージ管理ツールかインストーラーで。
 Djangoをインストールする
 virtualenv (venv)でPython環境を作ってインストール
 pip install Django
手っ取り早く伝えるために
デモ
https://github.com/tokibito/django-example-todo
https://goo.gl/xyjEcd
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
データベース設定
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.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
テンプレート
<html><body>
<ul>
{% for todo in todo_list %}
<li>
{{ todo.name }}
</li>
{% endfor %}
</ul>
</body><html>
todo/templates/index.html
Djangoのアーキテクチャ
 管理画面
 ユーザー認証
 開発用サーバー
 ORM
 キャッシュシステム
 テンプレートエンジン
 GIS
 セッション
 管理コマンド
 データベースマイグレーション
 ユニットテストフレームワーク
 プロジェクトテンプレート
 フォームウィジェット
 URLディスパッチャー
 再利用可能なアプリケーション
 ストレージシステム
 セキュリティミドルウェア
 フラッシュメッセージ配信
 サイトマップフレームワーク
 静的ファイル配信
 国際化
 メール送信フレームワーク
 プロジェクト設定
Djangoの機能
Djangoフレームワークの苦
手なところ
 複雑なSQL
 SQLAlchemyを検討
 JavaScriptを含むフォーム
 クライアント側で独立させるか、仕様を妥協
サードパーティ
 Djangoの機能だけでは足りない場合
 サードパーティのモジュールもたくさんある
 https://www.djangopackages.com/
 例えば..
 django-extensions
 django-debugtoolbar
 django-restframework
 Haystack
 python-social-auth
Djangoの安定性
 安定してます
 Djangoはフルスタックフレームワーク
 サードパーティのライブラリへの依存が無い
 依存ライブラリによって不安定になることはない
 十分にテストされている
 フレームワークの自動テスト
 http://djangoci.com/
 APIの互換性ポリシー
 DeprecationWarningが出るようになってから1つ次のバー
ジョンまでは維持される
 https://docs.djangoproject.com/ja/1.9/misc/api-
stability/
Djangoを使っている
サービスやプロダクト
 Instagram (写真共有サービス)
 Horizon (OpenStack Dashboard)
 Hue (Hadoop GUI)
 Open edX (eラーニング)
 その他いろいろ
こんな使い方も…
 manage.py inspectdb
 データベースからモデルクラスのコードを生成
 django.contrib.admin
 モデルクラスを登録して管理画面作成
 →→簡易データベース編集アプリを作れる!
データベース
Pythonコード
(Djangoモデルクラス) Django管理画面
inspectdb 管理画面へ登録
最近のアップデート
 1.8 (2015/04)
 復数のテンプレートエンジンをサポート
 長期サポートバージョン(以前のLTSは1.4)
 Python 3.5正式サポート
 1.9 (2015/12)
 管理画面のスタイルを刷新
 パスワード検証機能の追加
ドキュメント
 まずはオフィシャルドキュメント
 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
 本は残念ながら和書だと古いものしかないです…
django-ja (日本のユーザーコミュニ
ティ)
 リソースやドキュメントの日本語翻訳
 http://djangoproject.jp/
 事例やイベント情報、アップデート情報など掲載
 django-ja (Googleグループ)
 質問や相談など
 TokyoDjangoMeetup (東京)
 もくもく作業
 雑談、相談
勉強の進め方
 まずはチュートリアルをやってみる
 チュートリアルで使われている機能が理解できたら、
何か課題を見つけて作ってみる
 問題を解決できない場合は、メーリングリストなどで
質問する
 思う通りにアプリケーションを作れるようになってき
たら、テストコードを充実させてみる
 テストが書きづらいなら、対象のコードの設計を見直す
 デザインパターンなどを適用していくとよい
Djangoフレームワーク
を使ってみてね!

Djangoフレームワークの紹介