第2回は、
Djangoによるスマホアプリバックエンドの実装
はじめにYuichi Nakazawa氏とKazuhiko Kakita氏によるスマホアプリのバックエンド実装に関するセッションを紹介します。現在、
まずは導入部分で、
次にCMS構築の例を元に、
リレーション
- 多対一のリレーション
- 多対多のリレーション
- エクストラフィールドで多対多のリレーション
- 一対一のリレーション
モデルの継承
- 抽象ベースクラス
(親は実体を持たない) - マルチテーブル継承
(親も子も実体をもつ) - プロキシモデル
(子は実体を持たない、 子は項目追加できない、 親のメソッドの拡張に)
一般化リレーション
- いろいろなモデル親モデルにタグを付けたい場合などに使用する
マイグレーション
- Django1.
7から標準に - syncdbではなく、
migrate,createsuperuserを使用する。
次にAPI開発の実装のお話になりました。実際の開発ではサードパーティ製のRESTfulなライブラリではなく、
実例およびライブラリ
- OrderedDictを使用
(JSONのレスポンスに順序を付けるため) - スマホ側でデータをPOSTして、
Djangoのformでバリデーション - プッシュ通知
(pyapns, python-gcm) - 認証
(Python Social Auth) - 画像ファイル
(boto) - 公開
(Nginx + uWSGI)
Djangoアプリケーション、パフォーマンスチューニング
次にHiroki KIYOHARA氏によるDjangoアプリケーションのパフォーマンスチューニングのセッションを紹介します。KIYOHARA氏は、
このセッションでは主に、
最初にDjangoアプリを高速化するためのポイントとして、
- SQLを減らす
- インデックス
- キャッシュ
- アプリケーション外
SQL
まずはアプリケーションが動作しているときに、
- django-debug-toolbar
- select_
related、 prefetch_ related
次にインデックスについての説明になりました。RDBを相手にしているので、
インデックス
- Jet Profiler for MySQL
- extra クエリの一部分を生SQLで書く
- raw クエリを生SQLで書く
- テーブル設計が重要
キャッシュ
アプリケーションのキャッシュには次の4種類があり、
- レスポンスキャッシュ
- ビューキャッシュ
- テンプレートキャッシュ
- オブジェクトキャッシュ
次にアプリケーション外でのパフォーマンスを向上させるための施策についての話題となりました。セッションのバックエンドの修正や、
アプリケーション外
- セッションバックエンド
(django-redis-sessions) - 静的ファイル圧縮
(django-compressor, django-asset) - DBのPrimary/
Replica構成 (django-replicated)
最後に負荷試験ツールFunkLoadの紹介を行いました。Pythonでシナリオを記述でき、
FunkLoadパフォーマンス測定
- FunkLoad
- 負荷試験ツール
(Pythonで記述) - セッション付きのシナリオ
- 静的ファイルの自動取得
Data collection, analysis and optimization with python
次にShinji Iwaki氏によるセッションについて紹介します。Iwaki氏は主に業務で分析や最適化を行っていて、
最適化を行うまでには、
Flow of problem - solving with IT
- Collect
- Parse
- Analyze
- Optimize
- Visualize
次に各ステップで使用するライブラリやツールについて具体的に紹介し、
Collect & Parse
Analyzing data
Visualization
Optimization
Micro Pythonで組み込みPython
Hirotaka Kawata氏によるMicro Pythonに関するセッションをご紹介します。Micro Pythonはマイコン上で動作する新しいPythonのオープンソースの実装で、
またMicro Pythonには次のような特徴があり、
Micro Pythonの特徴
- マイコン上でPythonが動く
- Python3互換のPython処理系
(マイコン向けに再実装) - REPLが使える
(インタラクティブにマイコンを操作できる)
PyBoardに関しては、
XML-RPC : Pythonが「電池付属」と呼ばれる理由
最後にRansui Iso氏によるPythonのXML-RPCモジュールのセッションをご紹介します。Iso氏は1998年頃からPythonを使っていて、
そしてPythonでのXML-RPCの特徴について解説を行い、
PythonでのXML-RPC
- 標準ライブラリ
- xmlrpc.
server (サーバ側) - xmlrpc.
client (クライアント側) - PurePythonによる実装
- CPythonがあればどこでも使用可能
サーバ側
- SimpleXMLRPCServer
(サーバ) - SimpleXMLRPCRequestHandle
(公開する機能) - 上記両方を組み合わせる
クライアント側
- ServerProxy
Tips
- MetaClassの利用
- スレッド化
(Socketserver. ThreadingMixIn) - オブジェクトのバイナリデータの送受信
最後に事例として、
Pythonでは標準ライブラリが非常に充実しており、
次回は?
1日日は全部で21個のセッションが行われ、
発表内容もフレームワーク、
ここではいくつかの発表を紹介させて頂きましたが、
第3回ではPyCon JP 2014のカンファレンスのセッション