mirror of
				https://github.com/django/django.git
				synced 2025-10-26 07:06:08 +00:00 
			
		
		
		
	[3.2.x] Fixed #32754 -- Made AdminSite.catch_all_view() respect SCRIPT_NAME.
Regression inba31b01034. Backport off7691d4812from main
This commit is contained in:
		
				
					committed by
					
						 Mariusz Felisiak
						Mariusz Felisiak
					
				
			
			
				
	
			
			
			
						parent
						
							cb91b2d9e3
						
					
				
				
					commit
					ce78bc9808
				
			| @@ -420,14 +420,13 @@ class AdminSite: | ||||
|     def catch_all_view(self, request, url): | ||||
|         if settings.APPEND_SLASH and not url.endswith('/'): | ||||
|             urlconf = getattr(request, 'urlconf', None) | ||||
|             path = '%s/' % request.path_info | ||||
|             try: | ||||
|                 match = resolve(path, urlconf) | ||||
|                 match = resolve('%s/' % request.path_info, urlconf) | ||||
|             except Resolver404: | ||||
|                 pass | ||||
|             else: | ||||
|                 if getattr(match.func, 'should_append_slash', True): | ||||
|                     return HttpResponsePermanentRedirect(path) | ||||
|                     return HttpResponsePermanentRedirect('%s/' % request.path) | ||||
|         raise Http404 | ||||
|  | ||||
|     def _build_app_dict(self, request, label=None): | ||||
|   | ||||
| @@ -9,4 +9,6 @@ Django 3.2.4 fixes several bugs in 3.2.3. | ||||
| Bugfixes | ||||
| ======== | ||||
|  | ||||
| * ... | ||||
| * Fixed a bug in Django 3.2 where a final catch-all view in the admin didn't | ||||
|   respect the server-provided value of ``SCRIPT_NAME`` when redirecting | ||||
|   unauthenticated users to the login page (:ticket:`32754`). | ||||
|   | ||||
| @@ -6599,6 +6599,42 @@ class AdminSiteFinalCatchAllPatternTests(TestCase): | ||||
|         response = self.client.get(known_url[:-1]) | ||||
|         self.assertRedirects(response, known_url, status_code=301, target_status_code=403) | ||||
|  | ||||
|     @override_settings(APPEND_SLASH=True) | ||||
|     def test_missing_slash_append_slash_true_script_name(self): | ||||
|         superuser = User.objects.create_user( | ||||
|             username='staff', | ||||
|             password='secret', | ||||
|             email='staff@example.com', | ||||
|             is_staff=True, | ||||
|         ) | ||||
|         self.client.force_login(superuser) | ||||
|         known_url = reverse('admin:admin_views_article_changelist') | ||||
|         response = self.client.get(known_url[:-1], SCRIPT_NAME='/prefix/') | ||||
|         self.assertRedirects( | ||||
|             response, | ||||
|             '/prefix' + known_url, | ||||
|             status_code=301, | ||||
|             fetch_redirect_response=False, | ||||
|         ) | ||||
|  | ||||
|     @override_settings(APPEND_SLASH=True, FORCE_SCRIPT_NAME='/prefix/') | ||||
|     def test_missing_slash_append_slash_true_force_script_name(self): | ||||
|         superuser = User.objects.create_user( | ||||
|             username='staff', | ||||
|             password='secret', | ||||
|             email='staff@example.com', | ||||
|             is_staff=True, | ||||
|         ) | ||||
|         self.client.force_login(superuser) | ||||
|         known_url = reverse('admin:admin_views_article_changelist') | ||||
|         response = self.client.get(known_url[:-1]) | ||||
|         self.assertRedirects( | ||||
|             response, | ||||
|             '/prefix' + known_url, | ||||
|             status_code=301, | ||||
|             fetch_redirect_response=False, | ||||
|         ) | ||||
|  | ||||
|     @override_settings(APPEND_SLASH=True) | ||||
|     def test_missing_slash_append_slash_true_non_staff_user(self): | ||||
|         user = User.objects.create_user( | ||||
|   | ||||
		Reference in New Issue
	
	Block a user