読者です 読者をやめる 読者になる 読者になる

Djangoのメッセージフレームワークのストレージについて

Djangoフレームワークには、利用者ごとに一度だけ表示するメッセージ(フラッシュメッセージ)を扱う機能(django.contrib.messages)が含まれています。
The messages framework | Django documentation | Django
メッセージは、複数のリクエストをまたいで表示することを想定しているため、Cookieやセッションに保存する必要があります。
「メッセージはどこに保存されているの?」という疑問を持ったので、少し調べてみました。

ストレージバックエンド

どのようにしてメッセージを保存するかは、ストレージバックエンドに指定するクラスによって決まります。
バックエンドクラスは、Djangoの設定ファイルで切り替えられます(settings.MESSAGE_STORAGE)
Django 1.8では、django.contrib.messages.storage.fallback.FallbackStorageがデフォルトになっています。
Configuring the message engine

FallbackStorage

FallbackStorageは、最初にCookieStorageを使って、Cookieにメッセージを保存しようとします。CookieStorageに保存しきれなかったメッセージは、SessionStorageを使ってセッションに保存します。
class storage.fallback.FallbackStorage
Cookieに収まるサイズ(CookieStorageでは2KBが上限)のうちは、外部のストレージに依存しないで済むので、パフォーマンスは良さそう。
うまく作られていますね。