Django歴約3年のエンジニアが今使っているライブラリを紹介してみる

  • 43
    Like
  • 0
    Comment

この記事は Django Advent Calender 2016の 10日目の記事です。

こんにちは! 現職でDjangoを使いはじめて、約3年のエンジニアです。今回は自分自身の知識の整理の意味も兼ねて、今使っているDjango関連ライブラリの紹介をしたいと思います。

静的ファイル配信

django-storages

https://pypi.python.org/pypi/django-storages

Amazon S3などのCDNで静的ファイルを配信するためのライブラリ。
なかなかPython3対応されなくてdjango-storages-reduxというfork版が生まれたこともありますが、現在は最新の3.5まで対応しています。
最近ではwhitenoiseも人気があるようで、試してみて良かったら乗り換えてみようかと思っています。

django-compressor

https://pypi.python.org/pypi/django_compressor/2.1

複数のcss、jsファイルを一個にまとめてくれるライブラリです。中身をインラインに埋め込んだり、改行やコメントを覗いてデータ転送量を減らしてくれる機能もあります。
また、altJSやSass(SCSS)などのコンパイラと組み合わせることもできます。

easy-thumbnails

https://pypi.python.org/pypi/easy-thumbnails/2.3

いわゆる「サムネイル画像」を生成してくれるライブラリです。サムネイル画像の元になる画像が消された場合、サムネイル画像だけゴミとして残ってしまうので、thumbnail_cleanupコマンドで定期的に消してやる必要があります。

検索

django-haystack

https://pypi.python.org/pypi/django-haystack/2.5.1
Elasticsearchで位置情報を行うために使っています。
位置情報を使う際は、libgeoipをインストールした環境でないと検索ができません。

開発作業を便利にするコマンド追加 & よく書くパターンのコード簡潔にする

django-extensions

https://pypi.python.org/pypi/django-extensions/1.7.5

Djangoの諸々の機能をさらにパワーアップさせる、「かゆいところに手が届く」という感じのライブラリです。以下のコマンドが特にお気に入りです。

  • runserver_plusコマンド
    • エラー発生時にスタックトレースの任意の行でコード実行ができる。
  • shell_plusコマンド
    • モデルクラスや from django.conf import settingsなど、よく使うimport文が予め実行された状態でshellが開始される。

django-formtools

https://pypi.python.org/pypi/django-formtools/1.0

お問い合せフォームなどによくある「入力」→「確認」→「送信」の動きを実現するためのライブラリです。
元々はDjango本体に組み込まれていましたが、1.8から独立化しました。

django-model-utils

https://pypi.python.org/pypi/django-model-utils/2.6

モデル設計でよく使われるパターンを簡潔に書けるようにできるライブラリです。
StatusField、またはChoicesクラスは、「ステータス」のような予め決まった値しか入力できないフィールドを作る際に、普通にchoices属性にタプルを渡すよりすっきりした書き方になるのでよく使っています。

django-braces

https://pypi.python.org/pypi/django-braces

Class-based viewsのミックスインクラスをまとめたライブラリです。
開発を始める前にドキュメントをよく読んでおくと、楽に開発が進められます。
なお、LoginRequiredMixinについては、Django1.9から標準でLoginRequiredMixinができたので、標準を使っておいたほうがいいでしょう。

django-debug-toolbar

https://pypi.python.org/pypi/django-debug-toolbar/1.6

ブラウザの画面右側にデバッグ用のツールバーが表示されるようになるライブラリです。
ログの出力内容や、DBに投げられたクエリを確認するのに役立ちます。
また、シェル上からのモデル操作で投げられるクエリの解析をやってくれる、debugsqlshellという便利コマンドもあります。

django-haystack-panel

https://pypi.python.org/pypi/django-haystack-panel/0.2.1

django-debug-toolbarの拡張で、django-haystackから投げられたクエリの解析を行ってくれます。

REST API

djangorestframework

https://pypi.python.org/pypi/djangorestframework/3.5.3

DjangoでREST APIを提供するサービスを作るなら定番のライブラリ。
かなり高機能なので、作りたいものによっては、先に紹介したdjango-bracesのJSONResponseMixinJsonRequestResponseMixinAjaxResponseMixinを使ったほうがいいでしょう。

キャッシュ

django-fancy-cache

https://pypi.python.org/pypi/django-fancy-cache

「このデータが更新されたときに特定のページキャッシュを消す」のようなことするためのライブラリです。(標準のページキャッシュは意外にもそういうことできないんですよね…)

セキュリティ

django-axes

https://pypi.python.org/pypi/django-axes

一定回数ログインに失敗するとログイン画面をしばらく凍結してくれるようになるライブラリです。ブルートフォース(or リバースブルートフォース)でアカウントを盗もうとするボット対策で導入しています。
凍結時にWARNレベルでログを吐くので、メールやSlackなどで通知させるようにして、しつこくリトライしてくるIPアドレスはファイアウォールでブロックする方針です。

django-password-validation

https://pypi.python.org/pypi/django-password-validation

パスワード登録・更新時に、ある程度複雑なパスワードを強制するようにできます。
Django1.9から導入されたPassword validationを1.8以前にバックポートしたライブラリです。今手がけているサービスは1.8を使っているので導入しました。

その他参考になるサイト

cookiecutter-djangoというDjangoのプロジェクトテンプレートのrequirements以下はざっと読んでおくことをお勧めします。1
https://github.com/pydanny/cookiecutter-django


  1. ちなみにcookiecutter-djangoは5日目の@aki_yokさんが紹介している「Two Scoops of Django: Best Practices for Django 1.8」にも載っている、お勧めのテンプレートです。 

This post is the No.10 article of Django Advent Calendar 2016