Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Djangoフレームワークの紹介

29,955 views

Published on

Djangoフレームワークの紹介

Published in: Engineering
  • Be the first to comment

Djangoフレームワークの紹介

  1. 1. Django フレームワークの紹介 OSC2017北海道 2017/07/15
  2. 2. 1年ぶりです こんにちは
  3. 3. django-ja から来ました (゚∀゚)
  4. 4. お前、誰よ tokibito (岡野 真也)  大阪→和歌山→北海道→東京  Pythonを使って仕事してます  株式会社オープンコレクター 所属変わりました
  5. 5. Django
  6. 6. Djangoとは  「じゃんご」と読みます  Webアプリケーションフレームワーク  Python製  オープンソース  BSDライセンス  最新バージョン  1.11.3(2017/07)  開発: DjangoSoftwareFoundation
  7. 7. どんなことができる?
  8. 8. デモしましょう https://github.com/tokibito/django-example-todo
  9. 9. 簡単なToDoアプリを作る  =タスク管理アプリ  =やることリスト
  10. 10.  管理画面  ユーザー認証  開発用サーバー  ORM  キャッシュシステム  テンプレートエンジン  GIS  セッション  管理コマンド  データベースマイグレーション  ユニットテストフレームワーク  プロジェクトテンプレート  フォームウィジェット  URLディスパッチャー  再利用可能なアプリケーション  ストレージシステム  セキュリティミドルウェア  フラッシュメッセージ配信  サイトマップフレームワーク  静的ファイル配信  国際化  メール送信フレームワーク  プロジェクト設定 Djangoの機能
  11. 11.  管理画面  ユーザー認証  開発用サーバー  ORM  キャッシュシステム  テンプレートエンジン  GIS  セッション  管理コマンド  データベースマイグレーション  ユニットテストフレームワーク  プロジェクトテンプレート  フォームウィジェット  URLディスパッチャー  再利用可能なアプリケーション  ストレージシステム  セキュリティミドルウェア  フラッシュメッセージ配信  サイトマップフレームワーク  静的ファイル配信  国際化  メール送信フレームワーク  プロジェクト設定 Djangoの機能(デモで使用)
  12. 12. Djangoのアーキテクチャ
  13. 13. サードパーティ  Djangoの機能だけでは足りない場合  サードパーティのモジュールもたくさんある  https://www.djangopackages.com/  例えば..  django-extensions (コマンド拡張など)  django-debugtoolbar (デバッグ)  django-restframework (REST API)  Haystack (検索エンジン)  Mezzanine, cartridge (CMS, E-Commerce)
  14. 14. 歴史と実績  アメリカの新聞社が2006年OSSとして公開  11年経ちましたが開発は活発です  Python2.3-2.5→2.7-3.6→3.5+  利用事例  Instagram  ググってください(Djangoフレームワークの求人はそこ そこあります)  国内でも規模の大きな事例あります  ユーザー数が数万~のシステム  DBテーブル数200+  アプリケーションコード10万行+
  15. 15. 前回からのアップデート  バージョン1.9→1.11  1.10  1.11 LTS  Django1.Xの最後のバージョン  Python2.Xをサポートする最後のバージョン
  16. 16. 次のバージョン  2.0  2017/12  Python3.5以上サポート  2.2 LTS  2019/04
  17. 17. ユーザーコミュニティ  日本  Django-ja  主に東京で活動  www.djangoproject.jp  翻訳  海外  概ね国単位でローカルコミュニティがある  中心は英語のDjango-users
  18. 18. Djangoフレームワーク を使ってみてね!
  19. 19. 以降、雑多な資料。
  20. 20. Webアプリケーションって?  Webブラウザでインターネットを介し て利用できるアプリケーション  例えば?  ブログ  Twitter  Googleマップ  YouTube  その他いろいろ…
  21. 21. Webアプリケーションの イメージ インターネット パソコン (IE,Chrome, Firefox …) モバイル端末 (Android Chrome, iOS Safari …) Webサーバー (HTTPサーバー) データベース
  22. 22. Pythonについて  プログラミング言語  オープンソース  オブジェクト指向  動的型付け  クロスプラットフォーム対応  対話インターフェース  最新バージョンは Python 3.5
  23. 23. Pythonのコード def main(values): for number in values: print(number * number) # numberの二乗を表示 if __name__ == 'main': main() # Pythonでは、インデント(字下げ)の位置が変わるまでの範囲 が1つのブロックとなります。 main.py
  24. 24. Webアプリケーション フレームワークって?  Webアプリケーションの開発に使う外枠  よく使われるような機能をそろえてくれている  開発者はアプリケーションコードの記述に集中で きる  他のWebアプリケーションフレームワーク  Ruby on Rails (Ruby)  Symfony (PHP)
  25. 25. Webアプリケーションフ レームワークを使うところ インターネット パソコン (IE,Chrome, Firefox …) モバイル端末 (Android Chrome, iOS Safari …) Webサーバー (HTTPサーバー) データベース ↑このあたりで使います
  26. 26. Djangoを使ってみるには?  Pythonをインストールする  OSのパッケージ管理ツールかインストーラーで。  Djangoをインストールする  virtualenv (venv)でPython環境を作ってインストール  pip install Django
  27. 27. Djangoでの開発の流れ  プロジェクトを作る  データベース接続やタイムゾーンなどの各種設定  アプリケーションを作る  startapp  models.py  urls.pyとviews.py  テンプレート  動作確認  アプリケーションを作る(繰り返し..)
  28. 28. デモでやったこと  プロジェクトの作成  各種設定  アプリケーション作成  models.py  admin.py  views.py  urls.py  テンプレート  forms.py
  29. 29. プロジェクトの作成 (venv)$ django-admin startproject myproject shell
  30. 30. 開発サーバーの起動 (venv)$ cd myproject (venv) myproject/ $ python manage.py runserver shell
  31. 31. データベース設定 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } # sqlite3 以外に、postgres, mysql, oracle を指定可能 # サードパーティでSQLServerやFirebirdなども使える myproject/settings.py
  32. 32. データベース設定 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } # sqlite3 以外に、postgres, mysql, oracle を指定可能 # サードパーティでSQLServerやFirebirdなども使える myproject/settings.py
  33. 33. 言語、タイムゾーン設定 # 管理画面のUIやエラーメッセージなどが日本語になる LANGUAGE_CODE = 'ja' # 現在日時の扱いなどを日本時間にする TIME_ZONE = 'Asia/Tokyo' myproject/settings.py
  34. 34. アプリケーション作成 (venv) myproject/ $ python manage.py startapp todo # todoという名前のアプリケーションが作られる # Djangoのアプリケーションは、Pythonモジュールと同じ形式 shell
  35. 35. アプリケーション有効化 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'todo', # アプリケーション名を追記 ] myproject/settings.py
  36. 36. モデルの作成 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
  37. 37. 管理画面への登録 from django.contrib import admin from .models import Todo # Todoモデルを管理画面に登録 admin.site.register(Todo) todo/admin.py
  38. 38. 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
  39. 39. urls.py from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.index, name='index'), # 一覧表示 url(r'^add$', views.add, name='add'), # 追加 url(r'^(?P<pk>¥d+)/edit$', views.edit, name='edit'), # 編集 url(r'^(?P<pk>¥d+)/done$', views.done, name='done'), # 完了 ] todo/urls.py
  40. 40. テンプレート <html><body> <ul> {% for todo in todo_list %} <li> {{ todo.name }} </li> {% endfor %} </ul> </body><html> todo/templates/index.html
  41. 41. Djangoフレームワークの苦 手なところ  複雑なSQL  SQLAlchemyを検討  JavaScriptを含むフォーム  クライアント側で独立させるか、仕様を妥協
  42. 42. Djangoの安定性  安定してます  Djangoはフルスタックフレームワーク  サードパーティのライブラリへの依存が無い  依存ライブラリによって不安定になることはない  十分にテストされている  フレームワークの自動テスト  http://djangoci.com/  APIの互換性ポリシー  DeprecationWarningが出るようになってから1つ次のバー ジョンまでは維持される  https://docs.djangoproject.com/ja/1.9/misc/api- stability/
  43. 43. Djangoを使っている サービスやプロダクト  Instagram (写真共有サービス)  Horizon (OpenStack Dashboard)  Hue (Hadoop GUI)  Open edX (eラーニング)  その他いろいろ
  44. 44. こんな使い方も…  manage.py inspectdb  データベースからモデルクラスのコードを生成  django.contrib.admin  モデルクラスを登録して管理画面作成  →→簡易データベース編集アプリを作れる! データベース Pythonコード (Djangoモデルクラス) Django管理画面 inspectdb 管理画面へ登録
  45. 45. ドキュメント  まずはオフィシャルドキュメント  https://docs.djangoproject.com/en/1.9/  チュートリアルは日本語翻訳あり  https://docs.djangoproject.com/ja/1.9/  参考になるチュートリアル  http://eiry.bitbucket.org/  本  https://www.twoscoopspress.com/products/two- scoops-of-django-1-8  本は残念ながら和書だと古いものしかないです…
  46. 46. django-ja (日本のユーザーコミュニ ティ)  リソースやドキュメントの日本語翻訳  http://djangoproject.jp/  事例やイベント情報、アップデート情報など掲載  django-ja (Googleグループ)  質問や相談など  TokyoDjangoMeetup (東京)  もくもく作業  雑談、相談
  47. 47. 勉強の進め方  まずはチュートリアルをやってみる  チュートリアルで使われている機能が理解できたら、 何か課題を見つけて作ってみる  問題を解決できない場合は、メーリングリストなどで 質問する  思う通りにアプリケーションを作れるようになってき たら、テストコードを充実させてみる  テストが書きづらいなら、対象のコードの設計を見直す  デザインパターンなどを適用していくとよい

×