23 lines
994 B
Python
23 lines
994 B
Python
|
"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
|