Statistics
| Branch: | Tag: | Revision:

root / cloudcms / middleware.py @ d240ebcb

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