Django: Middleware
目次

概要

  • Django の主要な機能 (モデル・テンプレート・ビュー) と Web サーバー/アプリケーションの中間に位置

  • ビューを出入りするすべてのリクエストとレスポンスをフックできる

  • さまざまなミドルウェアが組み込みで用意されている

  • 自作して追加することも可能

  • 必要なものを settings に加えると利用できる

  • サイト全体にリクエストやレスポンスを使用して一律に何らかの機能を加えたい場合などに利用する

  • settings の MIDDLEWARE にリスト形式で列挙

  • 書いた順番に実行される。順番大事。

  • 書いたミドルウェアはリクエストの度に全部実行されるので、あまり重い処理は書かないようにすること。

    • できるかぎりデータベースアクセスしない

    • 必要なら django.utils.functional.SimpleLazyObject を使うようにする

主なミドルウェア

  • 以下は、 Django プロジェクト作成時にデフォルトで設定される

  • デフォルトで設定されるミドルウェアはとりあえずそのまま使うのが吉とのこと

SecurityMiddleware

  • リクエスト/レスポンスのセキュリティ強化

  • HTTP => HTTPS リダイレクト (デフォルトはOFF)

    SECURE_SSL_REDIRECT = True
    
  • 入れておいて損はないので何も考えずに入れておくとよい

SessionMiddleware

CommonMiddleware

  • ユーザーエージェントによるアクセス制限

  • URL リライティング

  • 公式でも使用を強くお勧め

  • 必須では

  • APPEND_SLASH

  • PREPEND_WWW

CsrfViewMiddleware

  • CSRF トークン検証

AuthenticationMiddleware

  • リクエストの度に、リクエストオブジェクトの user 属性にユーザー情報をセットしてくれる

  • ログイン済みの場合: セッション.Userインスタンス

  • 未ログインの場合: AnonymousUser (匿名ユーザー)

  • セッションが必要なので、 SessionMiddleware より後ろに書く

MessageMiddleware

XFrameOptionsMiddleware

  • クリックジャッキング対策

  • X-Frame-Options ヘッダーを全てのレスポンスに設定