diff options
author | Carlton Gibson <carlton.gibson@noumenal.es> | 2020-10-20 09:14:48 +0200 |
---|---|---|
committer | Carlton Gibson <carlton@noumenal.es> | 2020-10-22 14:15:19 +0200 |
commit | ad11f5b8c9cbfdb763e08c83170694abc0c5fc1e (patch) | |
tree | 28647127cf0bc05120bee7417609ec997a5b1f96 /tests/middleware | |
parent | 34180922380cf41cd684f846ecf00f92eb289bcf (diff) | |
download | django-ad11f5b8c9cbfdb763e08c83170694abc0c5fc1e.tar.gz |
Fixed #32124 -- Added per-view opt-out for APPEND_SLASH behavior.
Diffstat (limited to 'tests/middleware')
-rw-r--r-- | tests/middleware/tests.py | 11 | ||||
-rw-r--r-- | tests/middleware/urls.py | 3 | ||||
-rw-r--r-- | tests/middleware/views.py | 14 |
3 files changed, 28 insertions, 0 deletions
diff --git a/tests/middleware/tests.py b/tests/middleware/tests.py index 4b49858cd9..c7a007b821 100644 --- a/tests/middleware/tests.py +++ b/tests/middleware/tests.py @@ -128,6 +128,17 @@ class CommonMiddlewareTest(SimpleTestCase): self.assertEqual(CommonMiddleware(get_response_404)(request).status_code, 404) @override_settings(APPEND_SLASH=True) + def test_append_slash_opt_out(self): + """ + Views marked with @no_append_slash should be left alone. + """ + request = self.rf.get('/sensitive_fbv') + self.assertEqual(CommonMiddleware(get_response_404)(request).status_code, 404) + + request = self.rf.get('/sensitive_cbv') + self.assertEqual(CommonMiddleware(get_response_404)(request).status_code, 404) + + @override_settings(APPEND_SLASH=True) def test_append_slash_quoted(self): """ URLs which require quoting should be redirected to their slash version. diff --git a/tests/middleware/urls.py b/tests/middleware/urls.py index 8411d87b5a..e76f4ac771 100644 --- a/tests/middleware/urls.py +++ b/tests/middleware/urls.py @@ -8,4 +8,7 @@ urlpatterns = [ path('needsquoting#/', views.empty_view), # Accepts paths with two leading slashes. re_path(r'^(.+)/security/$', views.empty_view), + # Should not append slash. + path('sensitive_fbv/', views.sensitive_fbv), + path('sensitive_cbv/', views.SensitiveCBV.as_view()), ] diff --git a/tests/middleware/views.py b/tests/middleware/views.py index 3f8e055a53..ee36f418f2 100644 --- a/tests/middleware/views.py +++ b/tests/middleware/views.py @@ -1,5 +1,19 @@ from django.http import HttpResponse +from django.utils.decorators import method_decorator +from django.views.decorators.common import no_append_slash +from django.views.generic import View def empty_view(request, *args, **kwargs): return HttpResponse() + + +@no_append_slash +def sensitive_fbv(request, *args, **kwargs): + return HttpResponse() + + +@method_decorator(no_append_slash, name='dispatch') +class SensitiveCBV(View): + def get(self, *args, **kwargs): + return HttpResponse() |