4
3

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.

HTTP 40X系のエラーを起こすためのdjangoアプリケーション、django-maliceを作って公開したの巻

Last updated at Posted at 2017-08-27

djangoは開発環境(DEBUG=True)の場合、ビュー上でエラーが起きた場合はおなじみの有用なスタックトレースが記載されたエラー画面を表示する。

しかしプロダクション環境の場合はADMINSに設定されているメールアドレスに対してエラーがあった旨のメールを送信する。

また、slack_log_handlerを利用していれば、slack上にエラーの内容が送信される。

エラーの後に何かが動作するのならば、それを正しくチェックしなければならないということでdjango-maliceを作成した。

django-maliceについて

  • 以下のエラーをわざと起こすためのViewを提供します
    • HTTP 404 (Not Found)
    • HTTP 403 (Permission Denied)
    • HTTP 500 (Internal Server Error)

また、正常系をチェックする(HeartBeat等)のために HTTP 200 OK を返すページも提供します。

django-malice (GitHub Repository)

モチベーション

  • 以下をチェックするためにエラーをわざと起こすためのViewを毎回用意するのは面倒。ならば作って配布する。
  • エラーレポートが正しく送信されるのかをチェックしたい
  • ロギングやエラーをトリガーとした動作が正しく駆動するかチェックしたい

django-maliceのインストール方法

  1. pipにて以下をインストール
$ pip install django-malice
  1. INSTALLED_APPSに以下を追加
INSTALLED_APPS = [
    ...
    "malice",
]
  1. プロジェクトのROOT_URL_CONFに指定してあるurls.pyに以下を追加
url(r'^malice/', include('malice.urls', namespace='malice')),

注意: 本番環境の場合はURLを攻撃者が予測不可能な文字列に変更したほうが安全です。

例:

view_urlpatterns = [
    ...
    url(r'^all-your-error-are-belong-to-us-2101/', include('malice.urls', namespace='malice')),
    ...
]
  1. runserver して以下のURLをブラウザで開きます
$ ./manage.py runserver 0.0.0.0:8000

200以外のURLはエラーを返すことを確認します。

DEBUGがTrueの状態ではADMINSにメールは送信されないので、DEBUGフラグをFalseに設定してエラーリポートが送信されることを確認してください。

開発に関して

このアプリケーションは django meetup の時間を通してcircleciでのテスト構築、パッケージ化、Pypiでの配布を行いました。

ここで会を主催してくださった BeProudの https://twitter.com/hirokikyhttps://twitter.com/shimizukawaのご両人に感謝!

もしみなさんもお時間があれば django meetup に参加してみては如何でしょうか!

4
3
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
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?