この記事は Django Advent Calender 2016の 10日目の記事です。
こんにちは! 現職でDjangoを使いはじめて、約3年のエンジニアです。今回は自分自身の知識の整理の意味も兼ねて、今使っているDjango関連ライブラリの紹介をしたいと思います。
静的ファイル配信
django-storages
Amazon S3などのCDNで静的ファイルを配信するためのライブラリ。
なかなかPython3対応されなくてdjango-storages-reduxというfork版が生まれたこともありますが、現在は最新の3.5まで対応しています。
最近ではwhitenoiseも人気があるようで、試してみて良かったら乗り換えてみようかと思っています。
django-compressor
複数のcss、jsファイルを一個にまとめてくれるライブラリです。中身をインラインに埋め込んだり、改行やコメントを覗いてデータ転送量を減らしてくれる機能もあります。
また、altJSやSass(SCSS)などのコンパイラと組み合わせることもできます。
easy-thumbnails
いわゆる「サムネイル画像」を生成してくれるライブラリです。サムネイル画像の元になる画像が消された場合、サムネイル画像だけゴミとして残ってしまうので、thumbnail_cleanup
コマンドで定期的に消してやる必要があります。
検索
django-haystack
https://pypi.python.org/pypi/django-haystack/2.5.1
Elasticsearchで位置情報を行うために使っています。
位置情報を使う際は、libgeoip
をインストールした環境でないと検索ができません。
開発作業を便利にするコマンド追加 & よく書くパターンのコード簡潔にする
django-extensions
Djangoの諸々の機能をさらにパワーアップさせる、「かゆいところに手が届く」という感じのライブラリです。以下のコマンドが特にお気に入りです。
-
runserver_plus
コマンド- エラー発生時にスタックトレースの任意の行でコード実行ができる。
-
shell_plus
コマンド- モデルクラスや
from django.conf import settings
など、よく使うimport文が予め実行された状態でshell
が開始される。
- モデルクラスや
django-formtools
お問い合せフォームなどによくある「入力」→「確認」→「送信」の動きを実現するためのライブラリです。
元々はDjango本体に組み込まれていましたが、1.8から独立化しました。
django-model-utils
モデル設計でよく使われるパターンを簡潔に書けるようにできるライブラリです。
StatusField、またはChoicesクラスは、「ステータス」のような予め決まった値しか入力できないフィールドを作る際に、普通にchoices
属性にタプルを渡すよりすっきりした書き方になるのでよく使っています。
django-braces
Class-based viewsのミックスインクラスをまとめたライブラリです。
開発を始める前にドキュメントをよく読んでおくと、楽に開発が進められます。
なお、LoginRequiredMixinについては、Django1.9から標準でLoginRequiredMixinができたので、標準を使っておいたほうがいいでしょう。
django-debug-toolbar
ブラウザの画面右側にデバッグ用のツールバーが表示されるようになるライブラリです。
ログの出力内容や、DBに投げられたクエリを確認するのに役立ちます。
また、シェル上からのモデル操作で投げられるクエリの解析をやってくれる、debugsqlshell
という便利コマンドもあります。
django-haystack-panel
django-debug-toolbarの拡張で、django-haystackから投げられたクエリの解析を行ってくれます。
REST API
djangorestframework
DjangoでREST APIを提供するサービスを作るなら定番のライブラリ。
かなり高機能なので、作りたいものによっては、先に紹介したdjango-bracesのJSONResponseMixin、JsonRequestResponseMixin、AjaxResponseMixinを使ったほうがいいでしょう。
キャッシュ
django-fancy-cache
「このデータが更新されたときに特定のページキャッシュを消す」のようなことするためのライブラリです。(標準のページキャッシュは意外にもそういうことできないんですよね…)
セキュリティ
django-axes
一定回数ログインに失敗するとログイン画面をしばらく凍結してくれるようになるライブラリです。ブルートフォース(or リバースブルートフォース)でアカウントを盗もうとするボット対策で導入しています。
凍結時にWARNレベルでログを吐くので、メールやSlackなどで通知させるようにして、しつこくリトライしてくるIPアドレスはファイアウォールでブロックする方針です。
django-password-validation
パスワード登録・更新時に、ある程度複雑なパスワードを強制するようにできます。
Django1.9から導入された[Password validation]
(https://docs.djangoproject.com/en/dev/topics/auth/passwords/#password-validation)を1.8以前にバックポートしたライブラリです。今手がけているサービスは1.8を使っているので導入しました。
その他参考になるサイト
cookiecutter-djangoというDjangoのプロジェクトテンプレートのrequirements以下はざっと読んでおくことをお勧めします。1
https://github.com/pydanny/cookiecutter-django