Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Djangoフレームワークの紹介_OSC北海道2019

 Djangoフレームワークの紹介_OSC北海道2019

Shinya Okano

June 01, 2019
Tweet

More Decks by Shinya Okano

Other Decks in Technology

Transcript

  1. Django
    フレームワークの紹介
    OSC2019北海道
    2019/06/01

    View full-size slide

  2. 1年ぶりです
    こんにちは

    View full-size slide

  3. 東京から
    来ました

    View full-size slide

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

    View full-size slide

  5. Django

    紹介

    View full-size slide

  6. Djangoとは
     「じゃんご」と読みます
     Webアプリケーションフレームワーク
     Python製
     オープンソースソフトウェア
     BSDライセンス
     最新バージョン
     2.2.1(2019/06)
     開発: Django Software Foundation (DSF)

    View full-size slide

  7. どんなことができる?

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  13. Djangoのアーキテクチャ

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  16. 前回からのアップデート
     バージョン2.0→2.2
     2.1
     Python 3.5以上をサポート
     View Permission機能(管理画面などで「表示」権限)
     2.2
     Python 3.5以上をサポート
     LTS(Long-term support)バージョン(1.11→2.2)
     モデルの制約の新しい書き方
     Constraintクラス

    View full-size slide

  17. 次のバージョン
     3.0
     2019/12
     Python3.6以上サポート
     MariaDBサポート
     3.1
     2020/08

    View full-size slide

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

    View full-size slide

  19. オススメの資料
     オフィシャルドキュメント
     DjangoGirlsチュートリアル
     https://tutorial.djangogirls.org/ja/
     MDNのDjangoチュートリアル(英語, 翻訳中)
     https://developer.mozilla.org/ja/docs/Learn/Server
    -side/Django

    View full-size slide

  20. オススメの本
     現場で使える Django の教科書《基礎編》
     横瀬 明仁(akiyoko)さんの本
     現場で使える Django の教科書《実践編》

    View full-size slide

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

    View full-size slide

  22. 以降、雑多な資料。

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  40. 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

    View full-size slide

  41. 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

    View full-size slide

  42. 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

    View full-size slide

  43. テンプレート


    {% for todo in todo_list %}

    {{ todo.name }}

    {% endfor %}


    todo/templates/index.html

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  48. ドキュメント
     まずはオフィシャルドキュメント
     https://docs.djangoproject.com/en/2.2/
     チュートリアルは日本語翻訳あり
     https://docs.djangoproject.com/ja/2.2/
     参考になるチュートリアル
     DjangoGirlsチュートリアル
     MDNのDjangoチュートリアル(英語, 翻訳中)
     https://developer.mozilla.org/ja/docs/Learn/Server-
    side/Django
     本
     akiyokoさんの本がオススメ

    View full-size slide

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

    View full-size slide

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

    View full-size slide