I need to access the body of a request inside of a decorator, how can i do that?
I'm calling the cache_page
decorator from get
in a class based view. In order to perform some logic, i need to access the URL of the request in the decorator.
Here is my code:
def custom_cache_page(timeout, *, cache=None, key_prefix=None):
#print(request)
return decorator_from_middleware_with_args(CacheMiddleware)(
page_timeout=85,
cache_alias=cache,
key_prefix=key_prefix,
)
class Sales_View(APIView):
http_method_names = ['get']
@method_decorator(custom_cache_page(1.5))
def get(self, request, format=None):
...
Edit: i tried to do that with @wraps
def custom_cache_page(view):
@wraps(view)
def inner(request, *args, **kwargs):
return decorator_from_middleware_with_args(CacheMiddleware)(
page_timeout=85,
)
return inner
CodePudding user response:
You can define the decorator inside the custom_cache_page
, like:
from functools import wraps
def custom_cache_page(timeout, *, cache=None, key_prefix=None):
callto = decorator_from_middleware_with_args(CacheMiddleware)(
page_timeout=85,
cache_alias=cache,
key_prefix=key_prefix,
)
def decorator(view):
@wraps(view)
def f(request, *args, **kwargs):
print(request)
return callto(view)(request, *args, **kwargs)
return f
return decorator