Commit e2f14203 authored by Baptiste Mispelon's avatar Baptiste Mispelon
Browse files

Fixed #21564 -- Use local request object when possible in generic views.

Thanks to trac user adepue for the report and original patch.
parent 3eb58f0d
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -90,7 +90,7 @@ class View(object):
        logger.warning('Method Not Allowed (%s): %s', request.method, request.path,
            extra={
                'status_code': 405,
                'request': self.request
                'request': request
            }
        )
        return http.HttpResponseNotAllowed(self._allowed_methods())
@@ -193,10 +193,10 @@ class RedirectView(View):
            else:
                return http.HttpResponseRedirect(url)
        else:
            logger.warning('Gone: %s', self.request.path,
            logger.warning('Gone: %s', request.path,
                        extra={
                            'status_code': 410,
                            'request': self.request
                            'request': request
                        })
            return http.HttpResponseGone()

+18 −0
Original line number Diff line number Diff line
@@ -228,6 +228,15 @@ class ViewTest(unittest.TestCase):
            self.assertNotIn(attribute, dir(bare_view))
            self.assertIn(attribute, dir(view))

    def test_direct_instantiation(self):
        """
        It should be possible to use the view by directly instantiating it
        without going through .as_view() (#21564).
        """
        view = PostOnlyView()
        response = view.dispatch(self.rf.head('/'))
        self.assertEqual(response.status_code, 405)


class TemplateViewTest(TestCase):
    urls = 'generic_views.urls'
@@ -421,6 +430,15 @@ class RedirectViewTest(TestCase):
        response = RedirectView.as_view(url='/bar/')(self.rf.request(PATH_INFO='/foo/'))
        self.assertEqual(response.status_code, 301)

    def test_direct_instantiation(self):
        """
        It should be possible to use the view without going through .as_view()
        (#21564).
        """
        view = RedirectView()
        response = view.dispatch(self.rf.head('/foo/'))
        self.assertEqual(response.status_code, 410)


class GetContextDataTest(unittest.TestCase):