djangoフレームワークの紹介

Post on 15-Apr-2017

1.719 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Djangoフレームワークの紹介

OSC2016北海道

2016/06/18

お前、誰よ

tokibito (岡野 真也)

大阪→和歌山→北海道→東京

Pythonを使って仕事してます

株式会社ビープラウド

Django

Djangoとは

「じゃんご」と読みます

Webアプリケーションフレームワーク

Python製

オープンソース

BSDライセンス

最新バージョン

1.9.7(2016/06)

Webアプリケーション?

Webアプリケーションって?

Webブラウザでインターネットを介して利用できるアプリケーション

例えば?

ブログ

Twitter

Googleマップ

YouTube

その他いろいろ…

Webアプリケーションのイメージ

インターネット

パソコン

(IE, Chrome, Firefox …)

モバイル端末

(Android Chrome, iOS Safari …)

Webサーバー(HTTPサーバー)

データベース

Python?

Pythonについて

プログラミング言語

オープンソース

オブジェクト指向

動的型付け

クロスプラットフォーム対応

対話インターフェース

最新バージョンは Python 3.5

Pythonのコード

def main(values):

for number in values:

print(number * number) # numberの二乗を表示

if __name__ == 'main':

main()

# Pythonでは、インデント(字下げ)の位置が変わるまでの範囲が1つのブロックとなります。

main.py

Djangoとは

「じゃんご」と読みます

Webアプリケーションフレームワーク

Python製

オープンソース

BSDライセンス

最新バージョン

1.9.7(2016/06)

Webアプリケーションフレームワーク?

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

手っ取り早く伝えるためにデモ

https://github.com/tokibito/django-example-todo

https://goo.gl/xyjEcd

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のアーキテクチャ

管理画面

ユーザー認証

開発用サーバー

ORM

キャッシュシステム

テンプレートエンジン

GIS

セッション

管理コマンド

データベースマイグレーション

ユニットテストフレームワーク

プロジェクトテンプレート

フォームウィジェット

URLディスパッチャー

再利用可能なアプリケーション

ストレージシステム

セキュリティミドルウェア

フラッシュメッセージ配信

サイトマップフレームワーク

静的ファイル配信

国際化

メール送信フレームワーク

プロジェクト設定

Djangoの機能

Djangoフレームワークの苦手なところ

複雑なSQL

SQLAlchemyを検討

JavaScriptを含むフォーム

クライアント側で独立させるか、仕様を妥協

サードパーティ

Djangoの機能だけでは足りない場合

サードパーティのモジュールもたくさんある

https://www.djangopackages.com/

例えば..

django-extensions

django-debugtoolbar

django-restframework

Haystack

python-social-auth

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 管理画面へ登録

最近のアップデート

1.8 (2015/04)

復数のテンプレートエンジンをサポート

長期サポートバージョン(以前のLTSは1.4)

Python 3.5正式サポート

1.9 (2015/12)

管理画面のスタイルを刷新

パスワード検証機能の追加

ドキュメント

まずはオフィシャルドキュメント

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 (東京)

もくもく作業

雑談、相談

勉強の進め方

まずはチュートリアルをやってみる

チュートリアルで使われている機能が理解できたら、何か課題を見つけて作ってみる

問題を解決できない場合は、メーリングリストなどで質問する

思う通りにアプリケーションを作れるようになってきたら、テストコードを充実させてみる

テストが書きづらいなら、対象のコードの設計を見直す

デザインパターンなどを適用していくとよい

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

top related