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

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

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

16e69c2fb45f388ebf67eb5a1255197e?s=128

Shinya Okano

June 01, 2019
Tweet

Transcript

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

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

  3. 東京から 来ました

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

     django-ja
  5. Django の 紹介

  6. Djangoとは  「じゃんご」と読みます  Webアプリケーションフレームワーク  Python製  オープンソースソフトウェア 

    BSDライセンス  最新バージョン  2.2.1(2019/06)  開発: Django Software Foundation (DSF)
  7. どんなことができる?

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

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

  10.  管理画面  ユーザー認証  開発用サーバー  ORM  キャッシュシステム

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

     テンプレートエンジン  GIS  セッション  管理コマンド  データベースマイグレーション  ユニットテストフレームワーク  プロジェクトテンプレート  フォームウィジェット  URLディスパッチャー  再利用可能なアプリケーション  ストレージシステム  セキュリティミドルウェア  フラッシュメッセージ配信  サイトマップフレームワーク  静的ファイル配信  国際化  メール送信フレームワーク  プロジェクト設定 Djangoの機能(デモで使用)
  12. Djangoアプリのコード https://developer.mozilla.org/ja/docs/Learn/Server-side/Django/Introduction

  13. Djangoのアーキテクチャ

  14. サードパーティ  Djangoの機能だけでは足りない場合  サードパーティのモジュールもたくさんある  https://www.djangopackages.com/  例えば.. 

    django-extensions (コマンド拡張など)  django-debugtoolbar (デバッグ)  django-restframework (REST API)  Haystack (検索エンジン)  Wagtail, Mezzanine, cartridge (CMS, E-Commerce)
  15. 歴史と実績  アメリカの新聞社が2006年OSSとして公開  13年経ちましたが開発は活発です  Python2.3-2.5→2.7-3.6→3.5+  利用事例 

    Instagram, Pinterest, OpenStack  ググってください(Djangoフレームワークの求人はそこ そこあります)  国内でも規模の大きな事例あります  ユーザー数が数万~のシステム  DBテーブル数200+  アプリケーションコード10万行+
  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クラス
  17. 次のバージョン  3.0  2019/12  Python3.6以上サポート  MariaDBサポート 

    3.1  2020/08
  18. ユーザーコミュニティ  日本  Django-ja  主に東京で活動  https://djangoproject.jp/ 

    翻訳  DjangoCongressJP  海外  国や地域単位でローカルコミュニティがある  中心は英語のDjango-users
  19. オススメの資料  オフィシャルドキュメント  DjangoGirlsチュートリアル  https://tutorial.djangogirls.org/ja/  MDNのDjangoチュートリアル(英語, 翻訳中)

     https://developer.mozilla.org/ja/docs/Learn/Server -side/Django
  20. オススメの本  現場で使える Django の教科書《基礎編》  横瀬 明仁(akiyoko)さんの本  現場で使える

    Django の教科書《実践編》
  21. Djangoフレームワーク を使ってみてね!

  22. 以降、雑多な資料。

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

     Googleマップ  YouTube  その他いろいろ…
  24. Webアプリケーションの イメージ インターネット パソコン (IE, Chrome, Firefox …) モバイル端末 (Android

    Chrome, iOS Safari …) Webサーバー (HTTPサーバー) データベース
  25. Pythonについて  プログラミング言語  オープンソース  オブジェクト指向  動的型付け 

    クロスプラットフォーム対応  対話インターフェース  最新バージョンは Python 3.7
  26. Pythonのコード def main(values): for number in values: print(number * number)

    # numberの二乗を表示 if __name__ == '__main__': main() # Pythonでは、インデント(字下げ)の位置が変わるまでの範囲 が1つのブロックとなります。 main.py
  27. Webアプリケーション フレームワークって?  Webアプリケーションの開発に使う外枠  よく使われるような機能をそろえてくれている  開発者はアプリケーションコードの記述に集中で きる 

    他のWebアプリケーションフレームワーク  Ruby on Rails (Ruby)  Symfony、Laravel (PHP)
  28. Webアプリケーションフ レームワークを使うところ インターネット パソコン (IE, Chrome, Firefox …) モバイル端末 (Android

    Chrome, iOS Safari …) Webサーバー (HTTPサーバー) データベース ↑このあたりで使います
  29. Djangoを使ってみるには?  Pythonをインストールする  OSのパッケージ管理ツールかインストーラーで。  Djangoをインストールする  virtualenv (venv)でPython環境を作ってインストール

     pip install Django
  30. Djangoでの開発の流れ  プロジェクトを作る  データベース接続やタイムゾーンなどの各種設定  アプリケーションを作る  startapp 

    models.py  urls.pyとviews.py  テンプレート  動作確認  アプリケーションを作る(繰り返し..)
  31. デモでやったこと  プロジェクトの作成  各種設定  アプリケーション作成  models.py 

    admin.py  views.py  urls.py  テンプレート  forms.py
  32. プロジェクトの作成 (venv)$ django-admin startproject myproject shell

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

    shell
  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
  35. 言語、タイムゾーン設定 # 管理画面のUIやエラーメッセージなどが日本語になる LANGUAGE_CODE = 'ja' # 現在日時の扱いなどを日本時間にする TIME_ZONE =

    'Asia/Tokyo' myproject/settings.py
  36. アプリケーション作成 (venv) myproject/ $ python manage.py startapp todo # todoという名前のアプリケーションが作られる

    # Djangoのアプリケーションは、Pythonモジュールと同じ形式 shell
  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
  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
  39. 管理画面への登録 from django.contrib import admin from .models import Todo #

    Todoモデルを管理画面に登録 admin.site.register(Todo) todo/admin.py
  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
  41. urls.py (アプリケーション) from django.urls import path from . import views

    urlpatterns = [ path('', views.index, name='index'), # 一覧表示 path('add', views.add, name='add'), # 追加 path('<int:pk>/edit', views.edit, name='edit'), # 編集 path('<int:pk>/done', views.done, name='done'), # 完了 ] todo/urls.py
  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
  43. テンプレート <html><body> <ul> {% for todo in todo_list %} <li>

    {{ todo.name }} </li> {% endfor %} </ul> </body><html> todo/templates/index.html
  44. Djangoフレームワークの苦 手なところ  複雑なSQL  SQLAlchemyを検討  JavaScriptを含むフォーム  クライアント側で独立させるか、仕様を妥協

  45. Djangoの安定性  安定してます  Djangoはフルスタックフレームワーク  サードパーティのライブラリへの依存が無い  依存ライブラリによって不安定になることはない 

    十分にテストされている  フレームワークの自動テスト  https://djangoci.com/  APIの互換性ポリシー  DeprecationWarningが出るようになってから1つ次のバー ジョンまでは維持される  https://docs.djangoproject.com/ja/2.0/misc/api- stability/
  46. Djangoを使っている サービスやプロダクト  Instagram (写真共有サービス)  Horizon (OpenStack Dashboard) 

    Hue (Hadoop GUI)  Open edX (eラーニング)  その他いろいろ
  47. こんな使い方も…  manage.py inspectdb  データベースからモデルクラスのコードを生成  django.contrib.admin  モデルクラスを登録して管理画面作成

     →→簡易データベース編集アプリを作れる! データベース Pythonコード (Djangoモデルクラス) Django管理画面 inspectdb 管理画面へ登録
  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さんの本がオススメ
  49. django-ja (日本のユーザーコミュニ ティ)  リソースやドキュメントの日本語翻訳  https://djangoproject.jp/  事例やイベント情報、アップデート情報など掲載 

    django-ja (Googleグループ)  質問や相談など  TokyoDjangoMeetup (東京)  もくもく作業  雑談、相談  DjangoCongressJP  カンファレンス
  50. 勉強の進め方  まずはチュートリアルをやってみる  チュートリアルで使われている機能が理解できたら、 何か課題を見つけて作ってみる  問題を解決できない場合は、メーリングリストなどで 質問する 

    思う通りにアプリケーションを作れるようになってき たら、テストコードを充実させてみる  テストが書きづらいなら、対象のコードの設計を見直す