Slide 1

Slide 1 text

Django フレームワークの紹介 OSC2018北海道 2018/07/07

Slide 2

Slide 2 text

1年ぶりです こんにちは

Slide 3

Slide 3 text

django-ja から来ました (゚∀゚)

Slide 4

Slide 4 text

お前、誰よ @tokibito (岡野 真也)  大阪→和歌山→北海道→東京  Pythonを使って仕事してます  株式会社オープンコレクター

Slide 5

Slide 5 text

Django

Slide 6

Slide 6 text

Djangoとは  「じゃんご」と読みます  Webアプリケーションフレームワーク  Python製  オープンソース  BSDライセンス  最新バージョン  2.0.7(2018/07)  開発: DjangoSoftwareFoundation

Slide 7

Slide 7 text

どんなことができる?

Slide 8

Slide 8 text

デモしましょう https://github.com/tokibito/django-example-todo

Slide 9

Slide 9 text

簡単なToDoアプリ  =タスク管理アプリ  =やることリスト

Slide 10

Slide 10 text

 管理画面  ユーザー認証  開発用サーバー  ORM  キャッシュシステム  テンプレートエンジン  GIS  セッション  管理コマンド  データベースマイグレーション  ユニットテストフレームワーク  プロジェクトテンプレート  フォームウィジェット  URLディスパッチャー  再利用可能なアプリケーション  ストレージシステム  セキュリティミドルウェア  フラッシュメッセージ配信  サイトマップフレームワーク  静的ファイル配信  国際化  メール送信フレームワーク  プロジェクト設定 Djangoの機能

Slide 11

Slide 11 text

 管理画面  ユーザー認証  開発用サーバー  ORM  キャッシュシステム  テンプレートエンジン  GIS  セッション  管理コマンド  データベースマイグレーション  ユニットテストフレームワーク  プロジェクトテンプレート  フォームウィジェット  URLディスパッチャー  再利用可能なアプリケーション  ストレージシステム  セキュリティミドルウェア  フラッシュメッセージ配信  サイトマップフレームワーク  静的ファイル配信  国際化  メール送信フレームワーク  プロジェクト設定 Djangoの機能(デモで使用)

Slide 12

Slide 12 text

Djangoアプリのコード https://developer.mozilla.org/ja/docs/Learn/Server-side/Django/Introduction

Slide 13

Slide 13 text

Djangoのアーキテクチャ

Slide 14

Slide 14 text

サードパーティ  Djangoの機能だけでは足りない場合  サードパーティのモジュールもたくさんある  https://www.djangopackages.com/  例えば..  django-extensions (コマンド拡張など)  django-debugtoolbar (デバッグ)  django-restframework (REST API)  Haystack (検索エンジン)  Mezzanine, cartridge (CMS, E-Commerce)

Slide 15

Slide 15 text

歴史と実績  アメリカの新聞社が2006年OSSとして公開  12年経ちましたが開発は活発です  Python2.3-2.5→2.7-3.6→3.5+  利用事例  Instagram, Pinterest, OpenStack  ググってください(Djangoフレームワークの求人はそこ そこあります)  国内でも規模の大きな事例あります  ユーザー数が数万~のシステム  DBテーブル数200+  アプリケーションコード10万行+

Slide 16

Slide 16 text

前回からのアップデート  バージョン1.11→2.0  2.0  Python3.4~3.7をサポート(2.Xはサポートされません)  URLルーティングにpath関数追加  django.contrib.adminのレスポンシブデザイン  ウィンドウ関数の追加

Slide 17

Slide 17 text

次のバージョン  2.1  2018/08  Python3.5以上サポート  View Permission機能  2.2 LTS  2019/04

Slide 18

Slide 18 text

ユーザーコミュニティ  日本  Django-ja  主に東京で活動  https://djangoproject.jp/  翻訳  DjangoCongressJP  海外  概ね国単位でローカルコミュニティがある  中心は英語のDjango-users

Slide 19

Slide 19 text

本や資料  オフィシャルドキュメント推奨  今年は2~3冊出そう?  Amazonで検索してみてください  古い本のコードはそのままでは動かないので注意  MDNのDjangoチュートリアル(英語, 翻訳中)  https://developer.mozilla.org/ja/docs/Learn/Server -side/Django

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

以降、雑多な資料。

Slide 22

Slide 22 text

Webアプリケーションって?  Webブラウザでインターネットを介し て利用できるアプリケーション  例えば?  ブログ  Twitter  Googleマップ  YouTube  その他いろいろ…

Slide 23

Slide 23 text

Webアプリケーションの イメージ インターネット パソコン (IE, Chrome, Firefox …) モバイル端末 (Android Chrome, iOS Safari …) Webサーバー (HTTPサーバー) データベース

Slide 24

Slide 24 text

Pythonについて  プログラミング言語  オープンソース  オブジェクト指向  動的型付け  クロスプラットフォーム対応  対話インターフェース  最新バージョンは Python 3.7

Slide 25

Slide 25 text

Pythonのコード def main(values): for number in values: print(number * number) # numberの二乗を表示 if __name__ == 'main': main() # Pythonでは、インデント(字下げ)の位置が変わるまでの範囲 が1つのブロックとなります。 main.py

Slide 26

Slide 26 text

Webアプリケーション フレームワークって?  Webアプリケーションの開発に使う外枠  よく使われるような機能をそろえてくれている  開発者はアプリケーションコードの記述に集中で きる  他のWebアプリケーションフレームワーク  Ruby on Rails (Ruby)  Symfony、Laravel (PHP)

Slide 27

Slide 27 text

Webアプリケーションフ レームワークを使うところ インターネット パソコン (IE, Chrome, Firefox …) モバイル端末 (Android Chrome, iOS Safari …) Webサーバー (HTTPサーバー) データベース ↑このあたりで使います

Slide 28

Slide 28 text

Djangoを使ってみるには?  Pythonをインストールする  OSのパッケージ管理ツールかインストーラーで。  Djangoをインストールする  virtualenv (venv)でPython環境を作ってインストール  pip install Django

Slide 29

Slide 29 text

Djangoでの開発の流れ  プロジェクトを作る  データベース接続やタイムゾーンなどの各種設定  アプリケーションを作る  startapp  models.py  urls.pyとviews.py  テンプレート  動作確認  アプリケーションを作る(繰り返し..)

Slide 30

Slide 30 text

デモでやったこと  プロジェクトの作成  各種設定  アプリケーション作成  models.py  admin.py  views.py  urls.py  テンプレート  forms.py

Slide 31

Slide 31 text

プロジェクトの作成 (venv)$ django-admin startproject myproject shell

Slide 32

Slide 32 text

開発サーバーの起動 (venv)$ cd myproject (venv) myproject/ $ python manage.py runserver shell

Slide 33

Slide 33 text

データベース設定 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } # sqlite3 以外に、postgres, mysql, oracle を指定可能 # サードパーティでSQLServerやFirebirdなども使える myproject/settings.py

Slide 34

Slide 34 text

言語、タイムゾーン設定 # 管理画面のUIやエラーメッセージなどが日本語になる LANGUAGE_CODE = 'ja' # 現在日時の扱いなどを日本時間にする TIME_ZONE = 'Asia/Tokyo' myproject/settings.py

Slide 35

Slide 35 text

アプリケーション作成 (venv) myproject/ $ python manage.py startapp todo # todoという名前のアプリケーションが作られる # Djangoのアプリケーションは、Pythonモジュールと同じ形式 shell

Slide 36

Slide 36 text

アプリケーション有効化 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'todo', # アプリケーション名を追記 ] myproject/settings.py

Slide 37

Slide 37 text

モデルの作成 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

Slide 38

Slide 38 text

管理画面への登録 from django.contrib import admin from .models import Todo # Todoモデルを管理画面に登録 admin.site.register(Todo) todo/admin.py

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

urls.py (アプリケーション) from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), # 一覧表示 path('add', views.add, name='add'), # 追加 path('/edit', views.edit, name='edit'), # 編集 path('/done', views.done, name='done'), # 完了 ] todo/urls.py

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

テンプレート
    {% for todo in todo_list %}
  • {{ todo.name }}
  • {% endfor %}
todo/templates/index.html

Slide 43

Slide 43 text

Djangoフレームワークの苦 手なところ  複雑なSQL  SQLAlchemyを検討  JavaScriptを含むフォーム  クライアント側で独立させるか、仕様を妥協

Slide 44

Slide 44 text

Djangoの安定性  安定してます  Djangoはフルスタックフレームワーク  サードパーティのライブラリへの依存が無い  依存ライブラリによって不安定になることはない  十分にテストされている  フレームワークの自動テスト  https://djangoci.com/  APIの互換性ポリシー  DeprecationWarningが出るようになってから1つ次のバー ジョンまでは維持される  https://docs.djangoproject.com/ja/2.0/misc/api- stability/

Slide 45

Slide 45 text

Djangoを使っている サービスやプロダクト  Instagram (写真共有サービス)  Horizon (OpenStack Dashboard)  Hue (Hadoop GUI)  Open edX (eラーニング)  その他いろいろ

Slide 46

Slide 46 text

こんな使い方も…  manage.py inspectdb  データベースからモデルクラスのコードを生成  django.contrib.admin  モデルクラスを登録して管理画面作成  →→簡易データベース編集アプリを作れる! データベース Pythonコード (Djangoモデルクラス) Django管理画面 inspectdb 管理画面へ登録

Slide 47

Slide 47 text

ドキュメント  まずはオフィシャルドキュメント  https://docs.djangoproject.com/en/2.0/  チュートリアルは日本語翻訳あり  https://docs.djangoproject.com/ja/2.0/  参考になるチュートリアル  http://eiry.bitbucket.org/  MDNのDjangoチュートリアル(英語, 翻訳中)  https://developer.mozilla.org/ja/docs/Learn/Server- side/Django  本  今年は2~3冊出そう?  Amazonで検索してみてください  古い本のコードはそのままでは動かないので注意

Slide 48

Slide 48 text

django-ja (日本のユーザーコミュニ ティ)  リソースやドキュメントの日本語翻訳  https://djangoproject.jp/  事例やイベント情報、アップデート情報など掲載  django-ja (Googleグループ)  質問や相談など  TokyoDjangoMeetup (東京)  もくもく作業  雑談、相談  DjangoCongressJP  カンファレンス

Slide 49

Slide 49 text

勉強の進め方  まずはチュートリアルをやってみる  チュートリアルで使われている機能が理解できたら、 何か課題を見つけて作ってみる  問題を解決できない場合は、メーリングリストなどで 質問する  思う通りにアプリケーションを作れるようになってき たら、テストコードを充実させてみる  テストが書きづらいなら、対象のコードの設計を見直す  デザインパターンなどを適用していくとよい