Ticket #4604: visitor_messages_r6596.upatch

File visitor_messages_r6596.upatch, 5.9 KB (added by Manuel Saelices, 17 years ago)

Updated patch for revision 6596

Line 
1Index: django/contrib/sessions/tests.py
2===================================================================
3--- django/contrib/sessions/tests.py (revisión: 6596)
4+++ django/contrib/sessions/tests.py (copia de trabajo)
5@@ -15,6 +15,19 @@
6 'dog'
7 >>> db_session.pop('some key', 'does not exist')
8 'does not exist'
9+>>> db_session.get_messages()
10+[]
11+>>> db_session.create_message('first post')
12+>>> db_session.get_messages()
13+['first post']
14+>>> db_session.get_and_delete_messages()
15+['first post']
16+>>> db_session.get_and_delete_messages()
17+[]
18+>>> db_session.create_message('hello')
19+>>> db_session.create_message('world')
20+>>> db_session.get_and_delete_messages()
21+['hello', 'world']
22 >>> db_session.save()
23 >>> db_session.exists(db_session.session_key)
24 True
25@@ -32,6 +45,19 @@
26 'dog'
27 >>> file_session.pop('some key', 'does not exist')
28 'does not exist'
29+>>> file_session.get_messages()
30+[]
31+>>> file_session.create_message('first post')
32+>>> file_session.get_messages()
33+['first post']
34+>>> file_session.get_and_delete_messages()
35+['first post']
36+>>> file_session.get_and_delete_messages()
37+[]
38+>>> file_session.create_message('hello')
39+>>> file_session.create_message('world')
40+>>> file_session.get_and_delete_messages()
41+['hello', 'world']
42 >>> file_session.save()
43 >>> file_session.exists(file_session.session_key)
44 True
45@@ -49,6 +75,19 @@
46 'dog'
47 >>> cache_session.pop('some key', 'does not exist')
48 'does not exist'
49+>>> cache_session.get_messages()
50+[]
51+>>> cache_session.create_message('first post')
52+>>> cache_session.get_messages()
53+['first post']
54+>>> cache_session.get_and_delete_messages()
55+['first post']
56+>>> cache_session.get_and_delete_messages()
57+[]
58+>>> cache_session.create_message('hello')
59+>>> cache_session.create_message('world')
60+>>> cache_session.get_and_delete_messages()
61+['hello', 'world']
62 >>> cache_session.save()
63 >>> cache_session.delete(cache_session.session_key)
64 >>> cache_session.exists(cache_session.session_key)
65Index: django/contrib/sessions/backends/base.py
66===================================================================
67--- django/contrib/sessions/backends/base.py (revisión: 6596)
68+++ django/contrib/sessions/backends/base.py (copia de trabajo)
69@@ -18,6 +18,7 @@
70 """
71 TEST_COOKIE_NAME = 'testcookie'
72 TEST_COOKIE_VALUE = 'worked'
73+ MESSAGES_NAME = '_messages'
74
75 def __init__(self, session_key=None):
76 self._session_key = session_key
77@@ -60,6 +61,21 @@
78 def delete_test_cookie(self):
79 del self[self.TEST_COOKIE_NAME]
80
81+ def get_messages(self):
82+ return self.get(self.MESSAGES_NAME, [])
83+
84+ def get_and_delete_messages(self):
85+ return self.pop(self.MESSAGES_NAME, [])
86+
87+ def create_message(self, message):
88+ messages = self.get(self.MESSAGES_NAME)
89+ if messages is None:
90+ messages = []
91+ self[self.MESSAGES_NAME] = messages
92+ messages.append(message)
93+ self.modified = True
94+
95+
96 def encode(self, session_dict):
97 "Returns the given session dictionary pickled and encoded as a string."
98 pickled = pickle.dumps(session_dict, pickle.HIGHEST_PROTOCOL)
99Index: docs/sessions.txt
100===================================================================
101--- docs/sessions.txt (revisión: 6596)
102+++ docs/sessions.txt (copia de trabajo)
103@@ -191,6 +191,57 @@
104 request.session.set_test_cookie()
105 return render_to_response('foo/login_form.html')
106
107+Visitor Messages
108+================
109+
110+**New in Django development version**
111+
112+The session message system provides a simple way to queue messages for
113+all (anonymous or authenticated) site visitors. To associate messages with users
114+in the user database, use the `authentication message framework`_.
115+
116+.. _authentication message framework: ../authentication/#messages
117+
118+Messages are associated with a session, therefore a message only lasts as long
119+as a session is valid (see `browser-length sessions vs. persistent sessions`_).
120+
121+The message system relies on the session middleware and is accessed via
122+``request.session``. The API is simple:
123+
124+ * To create a new message, use
125+ ``request.session.create_message(message='message text').``
126+
127+ * To retreive the messages, use ``request.session.get_messages()``,
128+ which returns a list of any messages (strings) in the session's queue.
129+
130+ * To retrieve and delete messages, use
131+ ``user_obj.get_and_delete_messages()``, which returns the list of any
132+ messages in the session's queue and then deletes the messages from the
133+ queue.
134+
135+django.contrib.sessions.context_processors.visitor_messages
136+-----------------------------------------------------------
137+
138+This `context processor`_ is provided (but not installed by default) which makes
139+these messages available to the template context as the template variable
140+``{{ visitor_messages }}`` when you use ``RequestContext``.
141+
142+.. _context processor: ../templates_python/#subclassing-context-requestcontext
143+
144+Here's an example of template code that displays messages::
145+
146+ {% if visitor_messages %}
147+ <ul>
148+ {% for message in visitor_messages %}
149+ <li>{{ message|escape }}</li>
150+ {% endfor %}
151+ </ul>
152+ {% endif %}
153+
154+Note that when this context processor is accessed by ``RequestContext``,
155+``get_and_delete_messages`` is called behind the scenes, so any messages will
156+be deleted even if you don't display them.
157+
158 Using sessions out of views
159 ===========================
160
161Index: docs/authentication.txt
162===================================================================
163--- docs/authentication.txt (revisión: 6596)
164+++ docs/authentication.txt (copia de trabajo)
165@@ -947,7 +947,7 @@
166 Finally, note that this messages framework only works with users in the user
167 database. To send messages to anonymous users, use the `session framework`_.
168
169-.. _session framework: ../sessions/
170+.. _session framework: ../sessions/#visitor-messages
171
172 Other authentication sources
173 ============================
Back to Top