$30 off During Our Annual Pro Sale. View Details »

Djangoフレームワークの紹介 OSC2018do

Djangoフレームワークの紹介 OSC2018do

Shinya Okano

July 06, 2018
Tweet

More Decks by Shinya Okano

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  5. Django

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  13. Djangoのアーキテクチャ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  21. 以降、雑多な資料。

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  33. データベース設定
    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 Slide

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

    View Slide

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

    View Slide

  36. アプリケーション有効化
    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 Slide

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

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

    View Slide

  39. 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 Slide

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

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

  42. テンプレート


    {% for todo in todo_list %}

    {{ todo.name }}

    {% endfor %}


    todo/templates/index.html

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  47. ドキュメント
     まずはオフィシャルドキュメント
     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で検索してみてください
     古い本のコードはそのままでは動かないので注意

    View Slide

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

    View Slide

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

    View Slide