78
88

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DjangoAdvent Calendar 2016

Day 10

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

Last updated at Posted at 2016-12-09

この記事は 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のJSONResponseMixinJsonRequestResponseMixinAjaxResponseMixinを使ったほうがいいでしょう。

キャッシュ

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

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

78
88
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
78
88

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?