Created
April 10, 2022 08:56
-
-
Save rainyman2012/d615f040324e57b3626af44288e1f865 to your computer and use it in GitHub Desktop.
decorator in python
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def sensitive_post_parameters(*parameters): | |
""" | |
Indicate which POST parameters used in the decorated view are sensitive, | |
so that those parameters can later be treated in a special way, for example | |
by hiding them when logging unhandled exceptions. | |
Accept two forms: | |
* with specified parameters: | |
@sensitive_post_parameters('password', 'credit_card') | |
def my_view(request): | |
pw = request.POST['password'] | |
cc = request.POST['credit_card'] | |
... | |
* without any specified parameters, in which case consider all | |
variables are sensitive: | |
@sensitive_post_parameters() | |
def my_view(request) | |
... | |
""" | |
if len(parameters) == 1 and callable(parameters[0]): | |
raise TypeError( | |
'sensitive_post_parameters() must be called to use it as a ' | |
'decorator, e.g., use @sensitive_post_parameters(), not ' | |
'@sensitive_post_parameters.' | |
) | |
def decorator(view): | |
@functools.wraps(view) | |
def sensitive_post_parameters_wrapper(request, *args, **kwargs): | |
assert isinstance(request, HttpRequest), ( | |
"sensitive_post_parameters didn't receive an HttpRequest. " | |
"If you are decorating a classmethod, be sure to use " | |
"@method_decorator." | |
) | |
if parameters: | |
request.sensitive_post_parameters = parameters | |
else: | |
request.sensitive_post_parameters = '__ALL__' | |
return view(request, *args, **kwargs) | |
return sensitive_post_parameters_wrapper | |
return decorator |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment