From ae8e97384bbacaf4094b5f98c83b8599478b3fac Mon Sep 17 00:00:00 2001 From: Aymeric Augustin Date: Sun, 9 Dec 2012 21:12:52 +0100 Subject: [PATCH] Fixed #12502 -- Improved middleware diagram. --- docs/topics/http/_images/middleware.graffle | 957 ++++++++++++++++++++ docs/topics/http/_images/middleware.png | Bin 56301 -> 0 bytes docs/topics/http/_images/middleware.svg | 3 + docs/topics/http/middleware.txt | 21 +- 4 files changed, 972 insertions(+), 9 deletions(-) create mode 100644 docs/topics/http/_images/middleware.graffle delete mode 100644 docs/topics/http/_images/middleware.png create mode 100644 docs/topics/http/_images/middleware.svg diff --git a/docs/topics/http/_images/middleware.graffle b/docs/topics/http/_images/middleware.graffle new file mode 100644 index 0000000000..4aa85f7611 --- /dev/null +++ b/docs/topics/http/_images/middleware.graffle @@ -0,0 +1,957 @@ + + + + + ActiveLayerIndex + 0 + ApplicationVersion + + com.omnigroup.OmniGrafflePro + 139.16.0.171715 + + AutoAdjust + + BackgroundGraphic + + Bounds + {{0, 0}, {559.28997802734375, 782.8900146484375}} + Class + SolidGraphic + ID + 2 + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + + BaseZoom + 0 + CanvasOrigin + {0, 0} + ColumnAlign + 1 + ColumnSpacing + 36 + CreationDate + 2012-12-09 18:55:12 +0000 + Creator + Aymeric Augustin + DisplayScale + 1.000 cm = 1.000 cm + GraphDocumentVersion + 8 + GraphicsList + + + Bounds + {{144, 405}, {369, 27}} + Class + ShapedGraphic + ID + 33 + Shape + Bezier + ShapeData + + UnitPoints + + {-0.5, -0.5} + {-0.5, -0.5} + {0.47959183673469341, -0.5} + {0.47959183673469408, -0.5} + {0.47959183673469341, -0.5} + {0.5, 0} + {0.5, 0} + {0.5, 0} + {0.47959183673469408, 0.5} + {0.47959183673469408, 0.5} + {0.47959183673469408, 0.5} + {-0.5, 0.5} + {-0.5, 0.5} + {-0.5, 0.5} + {-0.47560975609756084, 0} + {-0.47560975609756084, 0} + {-0.47560975609756084, 0} + {-0.5, -0.5} + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 view function} + + + + Bounds + {{229.5, 238.5}, {297, 36}} + Class + ShapedGraphic + ID + 31 + Rotation + 270 + Shape + AdjustableArrow + ShapeData + + width + 27 + + Style + + fill + + Color + + a + 0.8 + b + 1 + g + 1 + r + 1 + + MiddleFraction + 0.70634919404983521 + + shadow + + Color + + a + 0.4 + b + 0 + g + 0 + r + 0 + + Draws + NO + Fuzziness + 0.0 + ShadowVector + {0, 2} + + stroke + + Color + + b + 0 + g + 0 + r + 1 + + Pattern + 1 + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fmodern\fcharset0 Courier;} +{\colortbl;\red255\green255\blue255;\red255\green0\blue0;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf2 process_exception} + + TextRelativeArea + {{0.125, 0.25}, {0.75, 0.5}} + isConnectedShape + + + + Bounds + {{328.5, 229.5}, {315, 36}} + Class + ShapedGraphic + ID + 30 + Rotation + 270 + Shape + AdjustableArrow + ShapeData + + width + 27 + + Style + + fill + + Color + + a + 0.8 + b + 1 + g + 1 + r + 1 + + MiddleFraction + 0.70634919404983521 + + shadow + + Color + + a + 0.4 + b + 0 + g + 0 + r + 0 + + Draws + NO + Fuzziness + 0.0 + ShadowVector + {0, 2} + + stroke + + Color + + b + 0 + g + 0.501961 + r + 0 + + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fmodern\fcharset0 Courier;} +{\colortbl;\red255\green255\blue255;\red0\green128\blue0;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf2 process_response} + + TextRelativeArea + {{0.125, 0.25}, {0.75, 0.5}} + isConnectedShape + + + + Bounds + {{283.5, 238.5}, {297, 36}} + Class + ShapedGraphic + ID + 29 + Rotation + 270 + Shape + AdjustableArrow + ShapeData + + width + 27 + + Style + + fill + + Color + + a + 0.8 + b + 1 + g + 1 + r + 1 + + MiddleFraction + 0.70634919404983521 + + shadow + + Color + + a + 0.4 + b + 0 + g + 0 + r + 0 + + Draws + NO + Fuzziness + 0.0 + ShadowVector + {0, 2} + + stroke + + Color + + b + 0 + g + 0.501961 + r + 0 + + Pattern + 1 + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fmodern\fcharset0 Courier;} +{\colortbl;\red255\green255\blue255;\red0\green128\blue0;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf2 process_template_response} + + TextRelativeArea + {{0.125, 0.25}, {0.75, 0.5}} + isConnectedShape + + + + Bounds + {{27, 243}, {288, 36}} + Class + ShapedGraphic + ID + 28 + Rotation + 90 + Shape + AdjustableArrow + ShapeData + + width + 27 + + Style + + fill + + Color + + a + 0.8 + b + 1 + g + 1 + r + 1 + + MiddleFraction + 0.70634919404983521 + + shadow + + Color + + a + 0.4 + b + 0 + g + 0 + r + 0 + + Draws + NO + Fuzziness + 0.0 + ShadowVector + {0, 2} + + stroke + + Color + + b + 0 + g + 0.501961 + r + 0 + + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fmodern\fcharset0 Courier;} +{\colortbl;\red255\green255\blue255;\red0\green128\blue0;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf2 process_view} + + TextRelativeArea + {{0.125, 0.25}, {0.75, 0.5}} + isConnectedShape + + + + Bounds + {{-40.500000000767386, 220.49999999804004}, {297, 36}} + Class + ShapedGraphic + ID + 27 + Rotation + 90 + Shape + AdjustableArrow + ShapeData + + width + 27 + + Style + + fill + + Color + + a + 0.8 + b + 1 + g + 1 + r + 1 + + MiddleFraction + 0.70634919404983521 + + shadow + + Color + + a + 0.4 + b + 0 + g + 0 + r + 0 + + Draws + NO + Fuzziness + 0.0 + ShadowVector + {0, 2} + + stroke + + Color + + b + 0 + g + 0.501961 + r + 0 + + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fmodern\fcharset0 Courier;} +{\colortbl;\red255\green255\blue255;\red0\green128\blue0;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf2 process_request} + + TextRelativeArea + {{0.125, 0.25}, {0.75, 0.5}} + isConnectedShape + + + + Bounds + {{360, 63}, {144, 27}} + Class + ShapedGraphic + ID + 12 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fmodern\fcharset0 Courier;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 HttpResponse} + + + + Bounds + {{72, 63}, {144, 27}} + Class + ShapedGraphic + ID + 11 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fmodern\fcharset0 Courier;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 HttpRequest} + + + + Bounds + {{72, 324}, {432, 27}} + Class + ShapedGraphic + ID + 10 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + FillType + 2 + GradientAngle + 90 + GradientColor + + w + 0.666667 + + + stroke + + CornerRadius + 5 + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fmodern\fcharset0 Courier;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 MessageMiddleware} + + + + Bounds + {{72, 279}, {432, 27}} + Class + ShapedGraphic + ID + 9 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + FillType + 2 + GradientAngle + 90 + GradientColor + + w + 0.666667 + + + stroke + + CornerRadius + 5 + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fmodern\fcharset0 Courier;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 AuthenticationMiddleware} + + + + Bounds + {{72, 234}, {432, 27}} + Class + ShapedGraphic + ID + 8 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + FillType + 2 + GradientAngle + 90 + GradientColor + + w + 0.666667 + + + stroke + + CornerRadius + 5 + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fmodern\fcharset0 Courier;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 CsrfViewMiddleware} + + + + Bounds + {{72, 189}, {432, 27}} + Class + ShapedGraphic + ID + 7 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + FillType + 2 + GradientAngle + 90 + GradientColor + + w + 0.666667 + + + stroke + + CornerRadius + 5 + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fmodern\fcharset0 Courier;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 SessionMiddleware} + + + + Bounds + {{72, 144}, {432, 27}} + Class + ShapedGraphic + ID + 6 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + FillType + 2 + GradientAngle + 90 + GradientColor + + w + 0.666667 + + + stroke + + CornerRadius + 5 + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fmodern\fcharset0 Courier;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 CommonMiddleware} + + + + GridInfo + + ShowsGrid + YES + SnapsToGrid + YES + + GuidesLocked + NO + GuidesVisible + YES + HPages + 1 + ImageCounter + 1 + KeepToScale + + Layers + + + Lock + NO + Name + Calque 1 + Print + YES + View + YES + + + LayoutInfo + + Animate + NO + circoMinDist + 18 + circoSeparation + 0.0 + layoutEngine + dot + neatoSeparation + 0.0 + twopiSeparation + 0.0 + + LinksVisible + NO + MagnetsVisible + NO + MasterSheets + + ModificationDate + 2012-12-09 19:48:54 +0000 + Modifier + Aymeric Augustin + NotesVisible + NO + Orientation + 2 + OriginVisible + NO + PageBreaks + YES + PrintInfo + + NSBottomMargin + + float + 41 + + NSHorizonalPagination + + coded + BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG + + NSLeftMargin + + float + 18 + + NSPaperSize + + size + {595.28997802734375, 841.8900146484375} + + NSPrintReverseOrientation + + int + 0 + + NSRightMargin + + float + 18 + + NSTopMargin + + float + 18 + + + PrintOnePage + + ReadOnly + NO + RowAlign + 1 + RowSpacing + 36 + SheetTitle + Canevas 1 + SmartAlignmentGuidesActive + YES + SmartDistanceGuidesActive + YES + UniqueID + 1 + UseEntirePage + + VPages + 1 + WindowInfo + + CurrentSheet + 0 + ExpandedCanvases + + Frame + {{248, 4}, {694, 874}} + ListView + + OutlineWidth + 142 + RightSidebar + + ShowRuler + + Sidebar + + SidebarWidth + 120 + VisibleRegion + {{0, 0}, {559, 735}} + Zoom + 1 + ZoomValues + + + Canevas 1 + 1 + 1 + + + + + diff --git a/docs/topics/http/_images/middleware.png b/docs/topics/http/_images/middleware.png deleted file mode 100644 index 505c70ac36f85c9481406a721a778eb4fef8df5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56301 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 + +2012-12-09 19:48ZCanevas 1Calque 1CommonMiddlewareSessionMiddlewareCsrfViewMiddlewareAuthenticationMiddlewareMessageMiddlewareHttpRequestHttpResponseprocess_requestprocess_viewprocess_template_responseprocess_responseprocess_exceptionview function diff --git a/docs/topics/http/middleware.txt b/docs/topics/http/middleware.txt index c27e7e8690..97d4a07784 100644 --- a/docs/topics/http/middleware.txt +++ b/docs/topics/http/middleware.txt @@ -32,17 +32,20 @@ created by :djadmin:`django-admin.py startproject `:: 'django.contrib.messages.middleware.MessageMiddleware', ) -During the request phases (:meth:`process_request` and :meth:`process_view` -middleware), Django applies middleware in the order it's defined in +During the request phases (:meth:`process_request` and :meth:`process_view`), +Django applies middleware in the order it's defined in :setting:`MIDDLEWARE_CLASSES`, top-down. During the response phases -(:meth:`process_response` and :meth:`process_exception` middleware), the -classes are applied in reverse order, from the bottom up. You can think of it -like an onion: each middleware class is a "layer" that wraps the view: +(:meth:`process_template_response`, :meth:`process_response`, and +:meth:`process_exception`), the classes are applied in reverse order, from the +bottom up. -.. image:: _images/middleware.png - :width: 502 - :height: 417 - :alt: Middleware application order. +.. image:: _images/middleware.svg + :alt: middleware application order + :width: 480 + :height: 408 + +If you prefer, you can also think of it like an onion: each middleware class +is a "layer" that wraps the view. A Django installation doesn't require any middleware -- e.g., :setting:`MIDDLEWARE_CLASSES` can be empty, if you'd like -- but it's strongly