Persistent Params Decorator

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
def persistent_params(*param_names):
    def decorate(view_func):
        @wraps(view_func)
        def decorated(request, *args, **kwargs):
            response = view_func(request, *args, **kwargs)
            if response.status_code in (301, 302, 303, 307):
                location = response['Location']
                parts = location.split('?')
                if len(parts) == 1:
                    query_dict = QueryDict('', mutable=True)
                else:
                    query_dict = QueryDict(parts[1], mutable=True)
                for name in param_names:
                    query_dict[name] = request.GET.get(name, None)
                new_query_string = query_dict.urlencode()
                response['Location'] = parts[0] + '?' + new_query_string
            return response
        return decorated
    return decorate

More like this

  1. . by jeremydw 3 years, 8 months ago
  2. madslug by catellar 2 years, 7 months ago
  3. watermark by dingdongquan 3 years, 3 months ago
  4. convert youtube url for iframe, js api by ivanff 1 year ago
  5. default url routing and shortcut by vicalloy 4 years, 10 months ago

Comments

ssadler (on August 6, 2009):

I think I'd change line 6 to be more explicit, ie:

if response.status_code in (301, 302, 303, 307):

To be safe.

#

achimnol (on September 12, 2009):

Thanks ssadler for pointing it. :)

#

(Forgotten your password?)