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とは  「じゃんご」と読みます  Webアプリケーションフレームワーク  Python製  オープンソースソフトウェア 

    BSDライセンス  最新バージョン  2.2.1(2019/06)  開発: Django Software Foundation (DSF)
  2.  管理画面  ユーザー認証  開発用サーバー  ORM  キャッシュシステム

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

     テンプレートエンジン  GIS  セッション  管理コマンド  データベースマイグレーション  ユニットテストフレームワーク  プロジェクトテンプレート  フォームウィジェット  URLディスパッチャー  再利用可能なアプリケーション  ストレージシステム  セキュリティミドルウェア  フラッシュメッセージ配信  サイトマップフレームワーク  静的ファイル配信  国際化  メール送信フレームワーク  プロジェクト設定 Djangoの機能(デモで使用)
  4. サードパーティ  Djangoの機能だけでは足りない場合  サードパーティのモジュールもたくさんある  https://www.djangopackages.com/  例えば.. 

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

    Instagram, Pinterest, OpenStack  ググってください(Djangoフレームワークの求人はそこ そこあります)  国内でも規模の大きな事例あります  ユーザー数が数万~のシステム  DBテーブル数200+  アプリケーションコード10万行+
  6. 前回からのアップデート  バージョン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クラス
  7. ユーザーコミュニティ  日本  Django-ja  主に東京で活動  https://djangoproject.jp/ 

    翻訳  DjangoCongressJP  海外  国や地域単位でローカルコミュニティがある  中心は英語のDjango-users
  8. Pythonについて  プログラミング言語  オープンソース  オブジェクト指向  動的型付け 

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

    # numberの二乗を表示 if __name__ == '__main__': main() # Pythonでは、インデント(字下げ)の位置が変わるまでの範囲 が1つのブロックとなります。 main.py
  10. Webアプリケーションフ レームワークを使うところ インターネット パソコン (IE, Chrome, Firefox …) モバイル端末 (Android

    Chrome, iOS Safari …) Webサーバー (HTTPサーバー) データベース ↑このあたりで使います
  11. Djangoでの開発の流れ  プロジェクトを作る  データベース接続やタイムゾーンなどの各種設定  アプリケーションを作る  startapp 

    models.py  urls.pyとviews.py  テンプレート  動作確認  アプリケーションを作る(繰り返し..)
  12. データベース設定 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR,

    'db.sqlite3'), } } # sqlite3 以外に、postgres, mysql, oracle を指定可能 # サードパーティでSQLServerやFirebirdなども使える myproject/settings.py
  13. モデルの作成 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
  14. 管理画面への登録 from django.contrib import admin from .models import Todo #

    Todoモデルを管理画面に登録 admin.site.register(Todo) todo/admin.py
  15. 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
  16. 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
  17. 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
  18. テンプレート <html><body> <ul> {% for todo in todo_list %} <li>

    {{ todo.name }} </li> {% endfor %} </ul> </body><html> todo/templates/index.html
  19. Djangoの安定性  安定してます  Djangoはフルスタックフレームワーク  サードパーティのライブラリへの依存が無い  依存ライブラリによって不安定になることはない 

    十分にテストされている  フレームワークの自動テスト  https://djangoci.com/  APIの互換性ポリシー  DeprecationWarningが出るようになってから1つ次のバー ジョンまでは維持される  https://docs.djangoproject.com/ja/2.0/misc/api- stability/
  20. こんな使い方も…  manage.py inspectdb  データベースからモデルクラスのコードを生成  django.contrib.admin  モデルクラスを登録して管理画面作成

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

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

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