summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/middleware/tests.py11
-rw-r--r--tests/middleware/urls.py3
-rw-r--r--tests/middleware/views.py14
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()