Ticket #16705: 16705.patch

File 16705.patch, 5.8 KB (added by Aymeric Augustin, 13 years ago)
  • django/test/client.py

     
    182182        """
    183183        The base environment for a request.
    184184        """
     185        # This is a minimal valid WSGI environ dictionary, plus HTTP_COOKIE
     186        # for cookie support. Empty strings are omitted.
     187        # See http://www.python.org/dev/peps/pep-3333/#environ-variables
    185188        environ = {
    186189            'HTTP_COOKIE':       self.cookies.output(header='', sep='; '),
    187             'PATH_INFO':         '/',
    188             'QUERY_STRING':      '',
    189             'REMOTE_ADDR':       '127.0.0.1',
    190190            'REQUEST_METHOD':    'GET',
    191             'SCRIPT_NAME':       '',
    192191            'SERVER_NAME':       'testserver',
    193192            'SERVER_PORT':       '80',
    194193            'SERVER_PROTOCOL':   'HTTP/1.1',
    195194            'wsgi.version':      (1,0),
    196195            'wsgi.url_scheme':   'http',
     196            'wsgi.input':        FakePayload(''),
    197197            'wsgi.errors':       self.errors,
    198198            'wsgi.multiprocess': True,
    199199            'wsgi.multithread':  False,
     
    235235            'PATH_INFO':       self._get_path(parsed),
    236236            'QUERY_STRING':    urlencode(data, doseq=True) or parsed[4],
    237237            'REQUEST_METHOD': 'GET',
    238             'wsgi.input':      FakePayload('')
    239238        }
    240239        r.update(extra)
    241240        return self.request(**r)
     
    267266            'PATH_INFO':       self._get_path(parsed),
    268267            'QUERY_STRING':    urlencode(data, doseq=True) or parsed[4],
    269268            'REQUEST_METHOD': 'HEAD',
    270             'wsgi.input':      FakePayload('')
    271269        }
    272270        r.update(extra)
    273271        return self.request(**r)
     
    280278            'PATH_INFO':       self._get_path(parsed),
    281279            'QUERY_STRING':    urlencode(data, doseq=True) or parsed[4],
    282280            'REQUEST_METHOD': 'OPTIONS',
    283             'wsgi.input':      FakePayload('')
    284281        }
    285282        r.update(extra)
    286283        return self.request(**r)
     
    311308            'PATH_INFO':       self._get_path(parsed),
    312309            'QUERY_STRING':    urlencode(data, doseq=True) or parsed[4],
    313310            'REQUEST_METHOD': 'DELETE',
    314             'wsgi.input':      FakePayload('')
    315311        }
    316312        r.update(extra)
    317313        return self.request(**r)
  • django/views/generic/simple.py

     
    4848    from the request is appended to the URL.
    4949
    5050    """
    51     args = request.META["QUERY_STRING"]
     51    args = request.META.get('QUERY_STRING', '')
    5252    if args and query_string and url is not None:
    5353        url = "%s?%s" % (url, args)
    5454
  • django/views/generic/base.py

     
    140140        are provided as kwargs to this method.
    141141        """
    142142        if self.url:
    143             args = self.request.META["QUERY_STRING"]
     143            args = self.request.META.get('QUERY_STRING', '')
    144144            if args and self.query_string:
    145145                url = "%s?%s" % (self.url, args)
    146146            else:
  • django/middleware/common.py

     
    8585                new_url[0], urlquote(new_url[1]))
    8686        else:
    8787            newurl = urlquote(new_url[1])
    88         if request.GET:
     88        if request.META.get('QUERY_STRING', ''):
    8989            newurl += '?' + request.META['QUERY_STRING']
    9090        return http.HttpResponsePermanentRedirect(newurl)
    9191
  • tests/regressiontests/views/tests/generic/simple.py

     
    4747        response = self.client.get('/simple/redirect_to_query/?param1=foo&param2=bar')
    4848        self.assertEqual(response.status_code, 301)
    4949        self.assertEqual('http://testserver/simple/target/?param1=foo&param2=bar', response['Location'])
     50
     51    def test_redirect_to_when_meta_contains_no_query_string(self):
     52        "regression for #16705"
     53        # we can't use self.client.get because it always sets QUERY_STRING
     54        response = self.client.request(PATH_INFO='/simple/redirect_to/')
     55        self.assertEqual(response.status_code, 301)
     56       
  • tests/regressiontests/generic_views/base.py

     
    248248        response = RedirectView.as_view()(self.rf.get('/foo/'))
    249249        self.assertEqual(response.status_code, 410)
    250250
    251     def test_permanaent_redirect(self):
     251    def test_permanent_redirect(self):
    252252        "Default is a permanent redirect"
    253253        response = RedirectView.as_view(url='/bar/')(self.rf.get('/foo/'))
    254254        self.assertEqual(response.status_code, 301)
     
    305305        response = RedirectView.as_view(url='/bar/')(self.rf.delete('/foo/'))
    306306        self.assertEqual(response.status_code, 301)
    307307        self.assertEqual(response['Location'], '/bar/')
     308
     309    def test_redirect_when_meta_contains_no_query_string(self):
     310        "regression for #16705"
     311        # we can't use self.rf.get because it always sets QUERY_STRING
     312        response = RedirectView.as_view(url='/bar/')(self.rf.request(PATH_INFO='/foo/'))
     313        self.assertEqual(response.status_code, 301)
Back to Top