42
Django フレームワークの紹介 OSC2016北海道 2016/06/18

Djangoフレームワークの紹介

Embed Size (px)

Citation preview

Page 1: Djangoフレームワークの紹介

Djangoフレームワークの紹介

OSC2016北海道

2016/06/18

Page 2: Djangoフレームワークの紹介

お前、誰よ

tokibito (岡野 真也)

大阪→和歌山→北海道→東京

Pythonを使って仕事してます

株式会社ビープラウド

Page 3: Djangoフレームワークの紹介

Django

Page 4: Djangoフレームワークの紹介

Djangoとは

「じゃんご」と読みます

Webアプリケーションフレームワーク

Python製

オープンソース

BSDライセンス

最新バージョン

1.9.7(2016/06)

Page 5: Djangoフレームワークの紹介

Webアプリケーション?

Page 6: Djangoフレームワークの紹介

Webアプリケーションって?

Webブラウザでインターネットを介して利用できるアプリケーション

例えば?

ブログ

Twitter

Googleマップ

YouTube

その他いろいろ…

Page 7: Djangoフレームワークの紹介

Webアプリケーションのイメージ

インターネット

パソコン

(IE, Chrome, Firefox …)

モバイル端末

(Android Chrome, iOS Safari …)

Webサーバー(HTTPサーバー)

データベース

Page 8: Djangoフレームワークの紹介

Python?

Page 9: Djangoフレームワークの紹介

Pythonについて

プログラミング言語

オープンソース

オブジェクト指向

動的型付け

クロスプラットフォーム対応

対話インターフェース

最新バージョンは Python 3.5

Page 10: Djangoフレームワークの紹介

Pythonのコード

def main(values):

for number in values:

print(number * number) # numberの二乗を表示

if __name__ == 'main':

main()

# Pythonでは、インデント(字下げ)の位置が変わるまでの範囲が1つのブロックとなります。

main.py

Page 11: Djangoフレームワークの紹介

Djangoとは

「じゃんご」と読みます

Webアプリケーションフレームワーク

Python製

オープンソース

BSDライセンス

最新バージョン

1.9.7(2016/06)

Page 12: Djangoフレームワークの紹介

Webアプリケーションフレームワーク?

Page 13: Djangoフレームワークの紹介

Webアプリケーションフレームワークって?

Webアプリケーションの開発に使う外枠

よく使われるような機能をそろえてくれている

開発者はアプリケーションコードの記述に集中できる

他のWebアプリケーションフレームワーク

Ruby on Rails (Ruby)

Symfony (PHP)

Page 14: Djangoフレームワークの紹介

Webアプリケーションフレームワークを使うところ

インターネット

パソコン

(IE, Chrome, Firefox …)

モバイル端末

(Android Chrome, iOS Safari …)

Webサーバー(HTTPサーバー)

データベース

↑このあたりで使います

Page 15: Djangoフレームワークの紹介

Djangoを使ってみるには?

Pythonをインストールする

OSのパッケージ管理ツールかインストーラーで。

Djangoをインストールする

virtualenv (venv)でPython環境を作ってインストール

pip install Django

Page 16: Djangoフレームワークの紹介

手っ取り早く伝えるためにデモ

https://github.com/tokibito/django-example-todo

https://goo.gl/xyjEcd

Page 17: Djangoフレームワークの紹介

Djangoでの開発の流れ

プロジェクトを作る

データベース接続やタイムゾーンなどの各種設定

アプリケーションを作る

startapp

models.py

urls.pyとviews.py

テンプレート

動作確認

アプリケーションを作る(繰り返し..)

Page 18: Djangoフレームワークの紹介

デモでやったこと

プロジェクトの作成

各種設定

アプリケーション作成

models.py

admin.py

views.py

urls.py

テンプレート

forms.py

Page 19: Djangoフレームワークの紹介

プロジェクトの作成

(venv)$ django-admin startproject myproject

shell

Page 20: Djangoフレームワークの紹介

開発サーバーの起動

(venv)$ cd myproject

(venv) myproject/ $ python manage.py runserver

shell

Page 21: Djangoフレームワークの紹介

データベース設定

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フレームワークの紹介

データベース設定

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フレームワークの紹介

言語、タイムゾーン設定

# 管理画面のUIやエラーメッセージなどが日本語になる

LANGUAGE_CODE = 'ja'

# 現在日時の扱いなどを日本時間にする

TIME_ZONE = 'Asia/Tokyo'

myproject/settings.py

Page 24: Djangoフレームワークの紹介

アプリケーション作成

(venv) myproject/ $ python manage.py startapp todo

# todoという名前のアプリケーションが作られる

# Djangoのアプリケーションは、Pythonモジュールと同じ形式

shell

Page 25: Djangoフレームワークの紹介

アプリケーション有効化

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フレームワークの紹介

モデルの作成

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フレームワークの紹介

管理画面への登録

from django.contrib import admin

from .models import Todo

# Todoモデルを管理画面に登録

admin.site.register(Todo)

todo/admin.py

Page 28: Djangoフレームワークの紹介

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フレームワークの紹介

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フレームワークの紹介

テンプレート

<html><body>

<ul>

{% for todo in todo_list %}

<li>

{{ todo.name }}

</li>

{% endfor %}

</ul>

</body><html>

todo/templates/index.html

Page 31: Djangoフレームワークの紹介

Djangoのアーキテクチャ

Page 32: Djangoフレームワークの紹介

管理画面

ユーザー認証

開発用サーバー

ORM

キャッシュシステム

テンプレートエンジン

GIS

セッション

管理コマンド

データベースマイグレーション

ユニットテストフレームワーク

プロジェクトテンプレート

フォームウィジェット

URLディスパッチャー

再利用可能なアプリケーション

ストレージシステム

セキュリティミドルウェア

フラッシュメッセージ配信

サイトマップフレームワーク

静的ファイル配信

国際化

メール送信フレームワーク

プロジェクト設定

Djangoの機能

Page 33: Djangoフレームワークの紹介

Djangoフレームワークの苦手なところ

複雑なSQL

SQLAlchemyを検討

JavaScriptを含むフォーム

クライアント側で独立させるか、仕様を妥協

Page 34: Djangoフレームワークの紹介

サードパーティ

Djangoの機能だけでは足りない場合

サードパーティのモジュールもたくさんある

https://www.djangopackages.com/

例えば..

django-extensions

django-debugtoolbar

django-restframework

Haystack

python-social-auth

Page 35: Djangoフレームワークの紹介

Djangoの安定性

安定してます

Djangoはフルスタックフレームワーク

サードパーティのライブラリへの依存が無い

依存ライブラリによって不安定になることはない

十分にテストされている

フレームワークの自動テスト

http://djangoci.com/

APIの互換性ポリシー

DeprecationWarningが出るようになってから1つ次のバージョンまでは維持される

https://docs.djangoproject.com/ja/1.9/misc/api-stability/

Page 36: Djangoフレームワークの紹介

Djangoを使っているサービスやプロダクト

Instagram (写真共有サービス)

Horizon (OpenStack Dashboard)

Hue (Hadoop GUI)

Open edX (eラーニング)

その他いろいろ

Page 37: Djangoフレームワークの紹介

こんな使い方も…

manage.py inspectdb

データベースからモデルクラスのコードを生成

django.contrib.admin

モデルクラスを登録して管理画面作成

→→簡易データベース編集アプリを作れる!

データベースPythonコード

(Djangoモデルクラス) Django管理画面

inspectdb 管理画面へ登録

Page 38: Djangoフレームワークの紹介

最近のアップデート

1.8 (2015/04)

復数のテンプレートエンジンをサポート

長期サポートバージョン(以前のLTSは1.4)

Python 3.5正式サポート

1.9 (2015/12)

管理画面のスタイルを刷新

パスワード検証機能の追加

Page 39: Djangoフレームワークの紹介

ドキュメント

まずはオフィシャルドキュメント

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フレームワークの紹介

django-ja (日本のユーザーコミュニ

ティ)

リソースやドキュメントの日本語翻訳

http://djangoproject.jp/

事例やイベント情報、アップデート情報など掲載

django-ja (Googleグループ)

質問や相談など

TokyoDjangoMeetup (東京)

もくもく作業

雑談、相談

Page 41: Djangoフレームワークの紹介

勉強の進め方

まずはチュートリアルをやってみる

チュートリアルで使われている機能が理解できたら、何か課題を見つけて作ってみる

問題を解決できない場合は、メーリングリストなどで質問する

思う通りにアプリケーションを作れるようになってきたら、テストコードを充実させてみる

テストが書きづらいなら、対象のコードの設計を見直す

デザインパターンなどを適用していくとよい

Page 42: Djangoフレームワークの紹介

Djangoフレームワークを使ってみてね!