summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Holovaty <adrian@holovaty.com>2005-10-08 21:44:37 +0000
committerAdrian Holovaty <adrian@holovaty.com>2005-10-08 21:44:37 +0000
commit71564b4349422d70af41cd3ea89d4667c9bf5086 (patch)
treeaf008e6a8acef2faa91f0bff2e3f3d4a1cc5e031
parenta933432a708e77437706051f9e80b05fdf602aee (diff)
Added django.utils.decorators, from Hugo's #580 patch. Refs #580.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@807 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-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