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

More Related Content

PDF
Djangoフレームワークのユーザーモデルと認証
PDF
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
PPTX
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PPTX
MongoDBが遅いときの切り分け方法
PDF
datatech-jp Casual Talks#3 データエンジニアを採用するための試行錯誤
PDF
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
PDF
【TECH×GAME COLLEGE#32】ゼロからリアルタイムサーバーを作るまで
PDF
こわくない Git
Djangoフレームワークのユーザーモデルと認証
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
MongoDBが遅いときの切り分け方法
datatech-jp Casual Talks#3 データエンジニアを採用するための試行錯誤
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
【TECH×GAME COLLEGE#32】ゼロからリアルタイムサーバーを作るまで
こわくない Git

What's hot (20)

PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
PPTX
Amazon SageMakerでカスタムコンテナを使った学習
PDF
それはYAGNIか? それとも思考停止か?
PDF
イミュータブルデータモデル(世代編)
PDF
Goの時刻に関するテスト
PDF
新入社員のための大規模ゲーム開発入門 サーバサイド編
PDF
マルチテナント化で知っておきたいデータベースのこと
PDF
社内ドキュメント検索システム構築のノウハウ
PDF
20191115-PGconf.Japan
PPTX
DockerコンテナでGitを使う
PDF
Pythonによる黒魔術入門
PDF
Djangoのエントリポイントとアプリケーションの仕組み
PPTX
がっつりMongoDB事例紹介
PPTX
グラフデータベース入門
PPTX
世界一わかりやすいClean Architecture
PDF
これからのネイティブアプリにおけるOpenID Connectの活用
PDF
なぜOpenID Connectが必要となったのか、その歴史的背景
PDF
Azure Database for PostgreSQL 入門 (PostgreSQL Conference Japan 2021)
KEY
やはりお前らのMVCは間違っている
PDF
マルチテナントのアプリケーション実装〜実践編〜
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Amazon SageMakerでカスタムコンテナを使った学習
それはYAGNIか? それとも思考停止か?
イミュータブルデータモデル(世代編)
Goの時刻に関するテスト
新入社員のための大規模ゲーム開発入門 サーバサイド編
マルチテナント化で知っておきたいデータベースのこと
社内ドキュメント検索システム構築のノウハウ
20191115-PGconf.Japan
DockerコンテナでGitを使う
Pythonによる黒魔術入門
Djangoのエントリポイントとアプリケーションの仕組み
がっつりMongoDB事例紹介
グラフデータベース入門
世界一わかりやすいClean Architecture
これからのネイティブアプリにおけるOpenID Connectの活用
なぜOpenID Connectが必要となったのか、その歴史的背景
Azure Database for PostgreSQL 入門 (PostgreSQL Conference Japan 2021)
やはりお前らのMVCは間違っている
マルチテナントのアプリケーション実装〜実践編〜
Ad

Viewers also liked (9)

PDF
Djangoエンジニアの観点から見たHue
PDF
Djangoフレームワークの紹介
PDF
通信対戦ゲームを作った話
PDF
スマートフォン向けサービスにおけるサーバサイド設計入門
PDF
日曜プログラマーが
1週間くらいで通信対戦ゲームを作ってみた
PDF
Djangoによるスマホアプリバックエンドの実装
PDF
自宅で出来る!ゲームサーバの作り方
PDF
ゲームサーバ開発現場の考え方
PDF
年の瀬!リアルタイム通信ゲームサーバ勉強会
Djangoエンジニアの観点から見たHue
Djangoフレームワークの紹介
通信対戦ゲームを作った話
スマートフォン向けサービスにおけるサーバサイド設計入門
日曜プログラマーが
1週間くらいで通信対戦ゲームを作ってみた
Djangoによるスマホアプリバックエンドの実装
自宅で出来る!ゲームサーバの作り方
ゲームサーバ開発現場の考え方
年の瀬!リアルタイム通信ゲームサーバ勉強会
Ad

Similar to Djangoフレームワークの紹介 (20)

PDF
Pycon2014 django performance
PDF
How To Drink Wsgi
PPT
Inside mobage platform
PPTX
Cloudstack user group meeting in osaka
PDF
初めてのPadrino
KEY
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
PPTX
13016 n分で作るtype scriptでnodejs
PPTX
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
PDF
Programming camp 2008, Codereading
PDF
Node予備校 vol.1 名古屋
PDF
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう by SRA OSS, Inc. 日本支社 高塚遥
PDF
ゆるふわAzure Functions
PDF
Software Development with Symfony
PDF
最新PHP事情 (2000年7月22日,PHPカンファレンス)
PPTX
Deep Learning Lab - Microsoft Machine Learning meetup 2018/06/27 - 推論編
PDF
データマイニング+WEB勉強会資料第6回
PDF
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
PDF
Windows PowerShell 2.0 の基礎知識
PDF
Djangoフレームワークの紹介 OSC2015北海道
PDF
実践 NestJS
Pycon2014 django performance
How To Drink Wsgi
Inside mobage platform
Cloudstack user group meeting in osaka
初めてのPadrino
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
13016 n分で作るtype scriptでnodejs
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
Programming camp 2008, Codereading
Node予備校 vol.1 名古屋
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう by SRA OSS, Inc. 日本支社 高塚遥
ゆるふわAzure Functions
Software Development with Symfony
最新PHP事情 (2000年7月22日,PHPカンファレンス)
Deep Learning Lab - Microsoft Machine Learning meetup 2018/06/27 - 推論編
データマイニング+WEB勉強会資料第6回
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Windows PowerShell 2.0 の基礎知識
Djangoフレームワークの紹介 OSC2015北海道
実践 NestJS

More from Shinya Okano (12)

PDF
Pyconjp2016 pyftplib
PDF
Python入門 コードリーディング - PyConJP2016
PPTX
Python札幌201406
PPTX
Spring4Dの紹介
PDF
Hadoopとその周辺の紹介
ODP
Delphi ideを使わない開発スタイルの紹介
PDF
2011.06.01 和歌山高専
PDF
電子書籍の話
PDF
写真共有アプリのバックエンドサーバー
PDF
Python札幌 2012/06/17
PDF
XenServerによるお手軽開発サーバ運用
PDF
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジ
Pyconjp2016 pyftplib
Python入門 コードリーディング - PyConJP2016
Python札幌201406
Spring4Dの紹介
Hadoopとその周辺の紹介
Delphi ideを使わない開発スタイルの紹介
2011.06.01 和歌山高専
電子書籍の話
写真共有アプリのバックエンドサーバー
Python札幌 2012/06/17
XenServerによるお手軽開発サーバ運用
mixiアプリ『the Actress』運用にあたっての課題へのチャレンジ

Djangoフレームワークの紹介