فهرست منبع

Fixed #14506 -- Added an assertion to XViewMiddleware about the dependency on the authentication middleware. Thanks, vanschelven.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@16496 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Jannis Leidel 13 سال پیش
والد
کامیت
43cb78fafd
3فایلهای تغییر یافته به همراه15 افزوده شده و 8 حذف شده
  1. 4 0
      django/middleware/doc.py
  2. 1 0
      docs/ref/middleware.txt
  3. 10 8
      tests/regressiontests/utils/decorators.py

+ 4 - 0
django/middleware/doc.py

@@ -12,6 +12,10 @@ class XViewMiddleware(object):
         indicating the view function.  This is used by the documentation module
         to lookup the view function for an arbitrary page.
         """
+        assert hasattr(request, 'user'), (
+            "The XView middleware requires authentication middleware to be "
+            "installed. Edit your MIDDLEWARE_CLASSES setting to insert "
+            "'django.contrib.auth.middleware.AuthenticationMiddleware'.")
         if request.method == 'HEAD' and (request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS or
                                          (request.user.is_active and request.user.is_staff)):
             response = http.HttpResponse()

+ 1 - 0
docs/ref/middleware.txt

@@ -80,6 +80,7 @@ View metadata middleware
 Sends custom ``X-View`` HTTP headers to HEAD requests that come from IP
 addresses defined in the :setting:`INTERNAL_IPS` setting. This is used by
 Django's :doc:`automatic documentation system </ref/contrib/admin/admindocs>`.
+Depends on :class:`~django.contrib.auth.middleware.AuthenticationMiddleware`.
 
 GZIP middleware
 ---------------

+ 10 - 8
tests/regressiontests/utils/decorators.py

@@ -1,24 +1,26 @@
 from django.http import HttpResponse
-from django.middleware.doc import XViewMiddleware
 from django.template import Template, Context
 from django.template.response import TemplateResponse
 from django.test import TestCase, RequestFactory
 from django.utils.decorators import decorator_from_middleware
 
 
-xview_dec = decorator_from_middleware(XViewMiddleware)
+class ProcessViewMiddleware(object):
+    def process_view(self, request, view_func, view_args, view_kwargs):
+        pass
 
+process_view_dec = decorator_from_middleware(ProcessViewMiddleware)
 
-@xview_dec
-def xview(request):
+@process_view_dec
+def process_view(request):
     return HttpResponse()
 
 
-class ClassXView(object):
+class ClassProcessView(object):
     def __call__(self, request):
         return HttpResponse()
 
-class_xview = xview_dec(ClassXView())
+class_process_view = process_view_dec(ClassProcessView())
 
 
 class FullMiddleware(object):
@@ -52,13 +54,13 @@ class DecoratorFromMiddlewareTests(TestCase):
         """
         Test a middleware that implements process_view.
         """
-        xview(self.rf.get('/'))
+        process_view(self.rf.get('/'))
 
     def test_callable_process_view_middleware(self):
         """
         Test a middleware that implements process_view, operating on a callable class.
         """
-        class_xview(self.rf.get('/'))
+        class_process_view(self.rf.get('/'))
 
     def test_full_dec_normal(self):
         """