summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/utils/decorators.py22
1 files changed, 22 insertions, 0 deletions
diff --git a/django/utils/decorators.py b/django/utils/decorators.py
new file mode 100644
index 0000000000..b21a4e4248
--- /dev/null
+++ b/django/utils/decorators.py
@@ -0,0 +1,22 @@
+"Functions that help with dynamically creating decorators for views."
+
+def decorator_from_middleware(middleware_class):
+ """
+ Given a middleware class (not an instance), returns a view decorator. This
+ lets you use middleware functionality on a per-view basis.
+ """
+ def _decorator_from_middleware(view_func, *args, **kwargs):
+ middleware = middleware_class(*args, **kwargs)
+ def _wrapped_view(request, *args, **kwargs):
+ if hasattr(middleware, 'process_request'):
+ result = middleware.process_request(request)
+ if result is not None:
+ return result
+ response = view_func(request, *args, **kwargs)
+ if hasattr(middleware, 'process_response'):
+ result = middleware.process_response(request, response)
+ if result is not None:
+ return result
+ return response
+ return _wrapped_view
+ return _decorator_from_middleware