root / cloudcms / middleware.py @ 6e445adf
History | View | Annotate | Download (1.4 kB)
1 |
import urlparse |
---|---|
2 |
import urllib |
3 |
|
4 |
from django.contrib import messages |
5 |
from django.http import HttpResponseRedirect |
6 |
|
7 |
class RequestMessagesMiddleware: |
8 |
"""
|
9 |
A middleware that checks for specific get parameters in url, appends
|
10 |
associated messages and redirects to the same url (removing the parameter
|
11 |
to avoid circular redirects).
|
12 |
"""
|
13 |
|
14 |
PARAMS_MAP = { |
15 |
'logged_in': ((messages.SUCCESS, 'You have successfully logged in'),), |
16 |
'logged_out': ((messages.SUCCESS, 'You have successfully logged out'),), |
17 |
} |
18 |
|
19 |
def process_request(self, request): |
20 |
qs = request.META.get('QUERY_STRING', '') |
21 |
if not qs: |
22 |
return
|
23 |
|
24 |
qs = urlparse.parse_qs(qs) |
25 |
|
26 |
# parse query string, add messages and keep params used to remove
|
27 |
# them later from the redirect url
|
28 |
params_to_remove = [] |
29 |
for param, messages_tuples in self.PARAMS_MAP.iteritems(): |
30 |
if param in qs: |
31 |
params_to_remove.append(param) |
32 |
for message in messages_tuples: |
33 |
msg_type = message[0]
|
34 |
msg = message[1]
|
35 |
messages.add_message(request, msg_type, msg) |
36 |
|
37 |
if not params_to_remove: |
38 |
return
|
39 |
|
40 |
for p in params_to_remove: |
41 |
del qs[p]
|
42 |
|
43 |
# create the redirect url
|
44 |
redirect_qs = urllib.urlencode(qs) |
45 |
|
46 |
return HttpResponseRedirect("/?" + redirect_qs) |
47 |
|