Loading django/views/generic/base.py +16 −2 Original line number Diff line number Diff line from __future__ import unicode_literals import logging import warnings from functools import update_wrapper from django import http Loading @@ -8,8 +9,10 @@ from django.core.exceptions import ImproperlyConfigured from django.core.urlresolvers import reverse, NoReverseMatch from django.template.response import TemplateResponse from django.utils.decorators import classonlymethod from django.utils.deprecation import RemovedInDjango19Warning from django.utils import six _sentinel = object() logger = logging.getLogger('django.request') Loading Loading @@ -48,7 +51,6 @@ class View(object): """ Main entry point for a request-response process. """ # sanitize keyword arguments for key in initkwargs: if key in cls.http_method_names: raise TypeError("You tried to pass in the %s method name as a " Loading Loading @@ -159,11 +161,23 @@ class RedirectView(View): """ A view that provides a redirect on any GET request. """ permanent = True permanent = _sentinel url = None pattern_name = None query_string = False def __init__(self, *args, **kwargs): if 'permanent' not in kwargs and self.permanent is _sentinel: warnings.warn( "Default value of 'RedirectView.permanent' will change " "from True to False in Django 1.9. Set an explicit value " "to silence this warning.", RemovedInDjango19Warning, stacklevel=3 ) self.permanent = True super(RedirectView, self).__init__(*args, **kwargs) def get_redirect_url(self, *args, **kwargs): """ Return the URL redirect to. Keyword arguments from the Loading docs/internals/deprecation.txt +4 −0 Original line number Diff line number Diff line Loading @@ -214,6 +214,10 @@ details on these changes. * The `cache_choices` option to :class:`~django.forms.ModelChoiceField` and :class:`~django.forms.ModelMultipleChoiceField` will be removed. * The default value of the :attr:`RedirectView.permanent <django.views.generic.base.RedirectView.permanent>` attribute will change from ``True`` to ``False``. .. _deprecation-removed-in-1.8: 1.8 Loading docs/ref/class-based-views/base.txt +5 −0 Original line number Diff line number Diff line Loading @@ -222,6 +222,11 @@ RedirectView status code 301. If ``False``, then the redirect will use status code 302. By default, ``permanent`` is ``True``. .. deprecated:: 1.8 The default value of the ``permanent`` attribute will change from ``True`` to ``False`` in Django 1.9. .. attribute:: query_string Whether to pass along the GET query string to the new location. If Loading docs/releases/1.8.txt +7 −0 Original line number Diff line number Diff line Loading @@ -1097,6 +1097,13 @@ deprecated: you should rename your ``qn`` arguments to ``compiler``, and call ``compiler.quote_name_unless_alias(...)`` where you previously called ``qn(...)``. Default value of ``RedirectView.permanent`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The default value of the :attr:`RedirectView.permanent <django.views.generic.base.RedirectView.permanent>` attribute will change from ``True`` to ``False`` in Django 1.9. .. removed-features-1.8: Features removed in 1.8 Loading tests/generic_views/test_base.py +68 −1 Original line number Diff line number Diff line Loading @@ -2,10 +2,14 @@ from __future__ import unicode_literals import time import unittest import warnings from django.core.exceptions import ImproperlyConfigured from django.http import HttpResponse from django.utils import six from django.utils.deprecation import RemovedInDjango19Warning from django.test import TestCase, RequestFactory, override_settings from django.test.utils import IgnoreDeprecationWarningsMixin from django.views.generic import View, TemplateView, RedirectView from . import views Loading Loading @@ -328,7 +332,7 @@ class TemplateViewTest(TestCase): @override_settings(ROOT_URLCONF='generic_views.urls') class RedirectViewTest(TestCase): class RedirectViewTest(IgnoreDeprecationWarningsMixin, TestCase): rf = RequestFactory() Loading Loading @@ -440,6 +444,69 @@ class RedirectViewTest(TestCase): self.assertEqual(response.status_code, 410) @override_settings(ROOT_URLCONF='generic_views.urls') class RedirectViewDeprecationTest(TestCase): rf = RequestFactory() def test_deprecation_warning_init(self): with warnings.catch_warnings(record=True) as warns: warnings.simplefilter('always') view = RedirectView() response = view.dispatch(self.rf.head('/python/')) self.assertEqual(response.status_code, 410) self.assertEqual(len(warns), 1) self.assertIs(warns[0].category, RemovedInDjango19Warning) self.assertEqual( six.text_type(warns[0].message), "Default value of 'RedirectView.permanent' will change " "from True to False in Django 1.9. Set an explicit value " "to silence this warning.", ) def test_deprecation_warning_raised_when_permanent_not_passed(self): with warnings.catch_warnings(record=True) as warns: warnings.simplefilter('always') view_function = RedirectView.as_view(url='/bbb/') request = self.rf.request(PATH_INFO='/aaa/') view_function(request) self.assertEqual(len(warns), 1) self.assertIs(warns[0].category, RemovedInDjango19Warning) self.assertEqual( six.text_type(warns[0].message), "Default value of 'RedirectView.permanent' will change " "from True to False in Django 1.9. Set an explicit value " "to silence this warning.", ) def test_no_deprecation_warning_when_permanent_passed(self): with warnings.catch_warnings(record=True) as warns: warnings.simplefilter('always') view_function = RedirectView.as_view(url='/bar/', permanent=False) request = self.rf.request(PATH_INFO='/foo/') view_function(request) self.assertEqual(len(warns), 0) def test_no_deprecation_warning_with_custom_redirectview(self): class CustomRedirectView(RedirectView): permanent = False with warnings.catch_warnings(record=True) as warns: warnings.simplefilter('always') view_function = CustomRedirectView.as_view(url='/eggs/') request = self.rf.request(PATH_INFO='/spam/') view_function(request) self.assertEqual(len(warns), 0) class GetContextDataTest(unittest.TestCase): def test_get_context_data_super(self): Loading Loading
django/views/generic/base.py +16 −2 Original line number Diff line number Diff line from __future__ import unicode_literals import logging import warnings from functools import update_wrapper from django import http Loading @@ -8,8 +9,10 @@ from django.core.exceptions import ImproperlyConfigured from django.core.urlresolvers import reverse, NoReverseMatch from django.template.response import TemplateResponse from django.utils.decorators import classonlymethod from django.utils.deprecation import RemovedInDjango19Warning from django.utils import six _sentinel = object() logger = logging.getLogger('django.request') Loading Loading @@ -48,7 +51,6 @@ class View(object): """ Main entry point for a request-response process. """ # sanitize keyword arguments for key in initkwargs: if key in cls.http_method_names: raise TypeError("You tried to pass in the %s method name as a " Loading Loading @@ -159,11 +161,23 @@ class RedirectView(View): """ A view that provides a redirect on any GET request. """ permanent = True permanent = _sentinel url = None pattern_name = None query_string = False def __init__(self, *args, **kwargs): if 'permanent' not in kwargs and self.permanent is _sentinel: warnings.warn( "Default value of 'RedirectView.permanent' will change " "from True to False in Django 1.9. Set an explicit value " "to silence this warning.", RemovedInDjango19Warning, stacklevel=3 ) self.permanent = True super(RedirectView, self).__init__(*args, **kwargs) def get_redirect_url(self, *args, **kwargs): """ Return the URL redirect to. Keyword arguments from the Loading
docs/internals/deprecation.txt +4 −0 Original line number Diff line number Diff line Loading @@ -214,6 +214,10 @@ details on these changes. * The `cache_choices` option to :class:`~django.forms.ModelChoiceField` and :class:`~django.forms.ModelMultipleChoiceField` will be removed. * The default value of the :attr:`RedirectView.permanent <django.views.generic.base.RedirectView.permanent>` attribute will change from ``True`` to ``False``. .. _deprecation-removed-in-1.8: 1.8 Loading
docs/ref/class-based-views/base.txt +5 −0 Original line number Diff line number Diff line Loading @@ -222,6 +222,11 @@ RedirectView status code 301. If ``False``, then the redirect will use status code 302. By default, ``permanent`` is ``True``. .. deprecated:: 1.8 The default value of the ``permanent`` attribute will change from ``True`` to ``False`` in Django 1.9. .. attribute:: query_string Whether to pass along the GET query string to the new location. If Loading
docs/releases/1.8.txt +7 −0 Original line number Diff line number Diff line Loading @@ -1097,6 +1097,13 @@ deprecated: you should rename your ``qn`` arguments to ``compiler``, and call ``compiler.quote_name_unless_alias(...)`` where you previously called ``qn(...)``. Default value of ``RedirectView.permanent`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The default value of the :attr:`RedirectView.permanent <django.views.generic.base.RedirectView.permanent>` attribute will change from ``True`` to ``False`` in Django 1.9. .. removed-features-1.8: Features removed in 1.8 Loading
tests/generic_views/test_base.py +68 −1 Original line number Diff line number Diff line Loading @@ -2,10 +2,14 @@ from __future__ import unicode_literals import time import unittest import warnings from django.core.exceptions import ImproperlyConfigured from django.http import HttpResponse from django.utils import six from django.utils.deprecation import RemovedInDjango19Warning from django.test import TestCase, RequestFactory, override_settings from django.test.utils import IgnoreDeprecationWarningsMixin from django.views.generic import View, TemplateView, RedirectView from . import views Loading Loading @@ -328,7 +332,7 @@ class TemplateViewTest(TestCase): @override_settings(ROOT_URLCONF='generic_views.urls') class RedirectViewTest(TestCase): class RedirectViewTest(IgnoreDeprecationWarningsMixin, TestCase): rf = RequestFactory() Loading Loading @@ -440,6 +444,69 @@ class RedirectViewTest(TestCase): self.assertEqual(response.status_code, 410) @override_settings(ROOT_URLCONF='generic_views.urls') class RedirectViewDeprecationTest(TestCase): rf = RequestFactory() def test_deprecation_warning_init(self): with warnings.catch_warnings(record=True) as warns: warnings.simplefilter('always') view = RedirectView() response = view.dispatch(self.rf.head('/python/')) self.assertEqual(response.status_code, 410) self.assertEqual(len(warns), 1) self.assertIs(warns[0].category, RemovedInDjango19Warning) self.assertEqual( six.text_type(warns[0].message), "Default value of 'RedirectView.permanent' will change " "from True to False in Django 1.9. Set an explicit value " "to silence this warning.", ) def test_deprecation_warning_raised_when_permanent_not_passed(self): with warnings.catch_warnings(record=True) as warns: warnings.simplefilter('always') view_function = RedirectView.as_view(url='/bbb/') request = self.rf.request(PATH_INFO='/aaa/') view_function(request) self.assertEqual(len(warns), 1) self.assertIs(warns[0].category, RemovedInDjango19Warning) self.assertEqual( six.text_type(warns[0].message), "Default value of 'RedirectView.permanent' will change " "from True to False in Django 1.9. Set an explicit value " "to silence this warning.", ) def test_no_deprecation_warning_when_permanent_passed(self): with warnings.catch_warnings(record=True) as warns: warnings.simplefilter('always') view_function = RedirectView.as_view(url='/bar/', permanent=False) request = self.rf.request(PATH_INFO='/foo/') view_function(request) self.assertEqual(len(warns), 0) def test_no_deprecation_warning_with_custom_redirectview(self): class CustomRedirectView(RedirectView): permanent = False with warnings.catch_warnings(record=True) as warns: warnings.simplefilter('always') view_function = CustomRedirectView.as_view(url='/eggs/') request = self.rf.request(PATH_INFO='/spam/') view_function(request) self.assertEqual(len(warns), 0) class GetContextDataTest(unittest.TestCase): def test_get_context_data_super(self): Loading