Upload
shinya-okano
View
1.719
Download
0
Embed Size (px)
Citation preview
Djangoフレームワークの紹介
OSC2016北海道
2016/06/18
お前、誰よ
tokibito (岡野 真也)
大阪→和歌山→北海道→東京
Pythonを使って仕事してます
株式会社ビープラウド
Django
Djangoとは
「じゃんご」と読みます
Webアプリケーションフレームワーク
Python製
オープンソース
BSDライセンス
最新バージョン
1.9.7(2016/06)
Webアプリケーション?
Webアプリケーションって?
Webブラウザでインターネットを介して利用できるアプリケーション
例えば?
ブログ
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フレームワークを使ってみてね!