浏览代码

Clarified the messages documentation.

* Stated upfront that the messages framework is enabled by default.
* Explained why FallbackStorage, despites its unattractive name, is the
  default and likely the most efficient message storage class.

Thanks Jeremy Dunck for the review.

Closes #17026 (again).
Aymeric Augustin 12 年之前
父节点
当前提交
ce53a1d0bf
共有 1 个文件被更改,包括 47 次插入49 次删除
  1. 47 49
      docs/ref/contrib/messages.txt

+ 47 - 49
docs/ref/contrib/messages.txt

@@ -5,14 +5,16 @@ The messages framework
 .. module:: django.contrib.messages
 .. module:: django.contrib.messages
    :synopsis: Provides cookie- and session-based temporary message storage.
    :synopsis: Provides cookie- and session-based temporary message storage.
 
 
-Quite commonly in web applications, you may need to display a one-time
-notification message (also know as "flash message") to the user after
-processing a form or some other types of user input. For this, Django provides
-full support for cookie- and session-based messaging, for both anonymous and
-authenticated users. The messages framework allows you to temporarily store
-messages in one request and retrieve them for display in a subsequent request
-(usually the next one). Every message is tagged with a specific ``level`` that
-determines its priority (e.g., ``info``, ``warning``, or ``error``).
+Quite commonly in web applications, you need to display a one-time
+notification message (also known as "flash message") to the user after
+processing a form or some other types of user input.
+
+For this, Django provides full support for cookie- and session-based
+messaging, for both anonymous and authenticated users. The messages framework
+allows you to temporarily store messages in one request and retrieve them for
+display in a subsequent request (usually the next one). Every message is
+tagged with a specific ``level`` that determines its priority (e.g., ``info``,
+``warning``, or ``error``).
 
 
 Enabling messages
 Enabling messages
 =================
 =================
@@ -20,32 +22,27 @@ Enabling messages
 Messages are implemented through a :doc:`middleware </ref/middleware>`
 Messages are implemented through a :doc:`middleware </ref/middleware>`
 class and corresponding :doc:`context processor </ref/templates/api>`.
 class and corresponding :doc:`context processor </ref/templates/api>`.
 
 
-To enable message functionality, do the following:
-
-* Edit the :setting:`MIDDLEWARE_CLASSES` setting and make sure
-  it contains ``'django.contrib.messages.middleware.MessageMiddleware'``.
+The default ``settings.py`` created by ``django-admin.py startproject``
+already contains all the settings required to enable message functionality:
 
 
-  If you are using a :ref:`storage backend <message-storage-backends>` that
-  relies on :doc:`sessions </topics/http/sessions>` (the default),
-  ``'django.contrib.sessions.middleware.SessionMiddleware'`` must be
-  enabled and appear before ``MessageMiddleware`` in your
-  :setting:`MIDDLEWARE_CLASSES`.
+* ``'django.contrib.messages'`` is in :setting:`INSTALLED_APPS`.
 
 
-* Edit the :setting:`TEMPLATE_CONTEXT_PROCESSORS` setting and make sure
-  it contains ``'django.contrib.messages.context_processors.messages'``.
+* :setting:`MIDDLEWARE_CLASSES` contains
+  ``'django.contrib.sessions.middleware.SessionMiddleware'`` and
+  ``'django.contrib.messages.middleware.MessageMiddleware'``.
 
 
-* Add ``'django.contrib.messages'`` to your :setting:`INSTALLED_APPS`
-  setting
+  The default :ref:`storage backend <message-storage-backends>` relies on
+  :doc:`sessions </topics/http/sessions>`. That's why ``SessionMiddleware``
+  must be enabled and appear before ``MessageMiddleware`` in
+  :setting:`MIDDLEWARE_CLASSES`.
 
 
-The default ``settings.py`` created by ``django-admin.py startproject`` has
-``MessageMiddleware`` activated and the ``django.contrib.messages`` app
-installed. Also, the default value for :setting:`TEMPLATE_CONTEXT_PROCESSORS`
-contains ``'django.contrib.messages.context_processors.messages'``.
+* :setting:`TEMPLATE_CONTEXT_PROCESSORS`   contains
+  ``'django.contrib.messages.context_processors.messages'``.
 
 
-If you don't want to use messages, you can remove the
-``MessageMiddleware`` line from :setting:`MIDDLEWARE_CLASSES`, the ``messages``
-context processor from :setting:`TEMPLATE_CONTEXT_PROCESSORS` and
-``'django.contrib.messages'`` from your :setting:`INSTALLED_APPS`.
+If you don't want to use messages, you can remove
+``'django.contrib.messages'`` from your :setting:`INSTALLED_APPS`, the
+``MessageMiddleware`` line from :setting:`MIDDLEWARE_CLASSES`, and the
+``messages`` context processor from :setting:`TEMPLATE_CONTEXT_PROCESSORS`.
 
 
 Configuring the message engine
 Configuring the message engine
 ==============================
 ==============================
@@ -56,34 +53,35 @@ Storage backends
 ----------------
 ----------------
 
 
 The messages framework can use different backends to store temporary messages.
 The messages framework can use different backends to store temporary messages.
-If the default FallbackStorage isn't suitable to your needs, you can change
-which backend is being used by adding a `MESSAGE_STORAGE`_ to your
-settings, referencing the module and class of the storage class. For
-example::
 
 
-    MESSAGE_STORAGE = 'django.contrib.messages.storage.cookie.CookieStorage'
+Django provides three built-in storage classes:
 
 
-The value should be the full path of the desired storage class.
+.. class:: django.contrib.messages.storage.session.SessionStorage
 
 
-Three storage classes are available:
+    This class stores all messages inside of the request's session. Therefore
+    it requires Django's ``contrib.sessions`` application.
 
 
-``'django.contrib.messages.storage.session.SessionStorage'``
-    This class stores all messages inside of the request's session. It
-    requires Django's ``contrib.sessions`` application.
+.. class:: django.contrib.messages.storage.cookie.CookieStorage
 
 
-``'django.contrib.messages.storage.cookie.CookieStorage'``
     This class stores the message data in a cookie (signed with a secret hash
     This class stores the message data in a cookie (signed with a secret hash
     to prevent manipulation) to persist notifications across requests. Old
     to prevent manipulation) to persist notifications across requests. Old
-    messages are dropped if the cookie data size would exceed 4096 bytes.
+    messages are dropped if the cookie data size would exceed 2048 bytes.
+
+.. class:: django.contrib.messages.storage.fallback.FallbackStorage
 
 
-``'django.contrib.messages.storage.fallback.FallbackStorage'``
-    This is the default storage class.
+    This class first uses ``CookieStorage``, and falls back to using
+    ``SessionStorage`` for the messages that could not fit in a single cookie.
+    It also requires Django's ``contrib.sessions`` application.
 
 
-    This class first uses CookieStorage for all messages, falling back to using
-    SessionStorage for the messages that could not fit in a single cookie.
+    This behavior avoids writing to the session whenever possible. It should
+    provide the best performance in the general case.
 
 
-    Since it is uses SessionStorage, it also requires Django's
-    ``contrib.sessions`` application.
+:class:`~django.contrib.messages.storage.fallback.FallbackStorage` is the
+default storage class. If it isn't suitable to your needs, you can select
+another storage class by setting `MESSAGE_STORAGE`_ to its full import path,
+for example::
+
+    MESSAGE_STORAGE = 'django.contrib.messages.storage.cookie.CookieStorage'
 
 
 To write your own storage class, subclass the ``BaseStorage`` class in
 To write your own storage class, subclass the ``BaseStorage`` class in
 ``django.contrib.messages.storage.base`` and implement the ``_get`` and
 ``django.contrib.messages.storage.base`` and implement the ``_get`` and
@@ -97,8 +95,8 @@ to that of the Python logging module. Message levels allow you to group
 messages by type so they can be filtered or displayed differently in views and
 messages by type so they can be filtered or displayed differently in views and
 templates.
 templates.
 
 
-The built-in levels (which can be imported from ``django.contrib.messages``
-directly) are:
+The built-in levels, which can be imported from ``django.contrib.messages``
+directly, are:
 
 
 =========== ========
 =========== ========
 Constant    Purpose
 Constant    Purpose