最近在学flask 的时候对于decorator 的一些疑惑:
from functools import wraps
from flask import abort
from flask_login import current_user
from app.models import Permission
def permission_required(permission):
def decorator(x):
@wraps(x)
def decorated_function(*args,**kwargs):
if not current_user.can(permission):
abort(403)
return x(*args,**kwargs)
return decorated_function
return decorator
def admin_required(f):
return permission_required(Permission.ADMINISTRATOR)(f)
在使用@permission_required 时,我在想,为什么看别人的例子需要给个func的参数??而我这个除了func 之外还有参数就不用写个func的形参??
import sys
debug_log = sys.stderr
def trace(func):
if debug_log:
def callf(*args, **kwargs):
"""A wrapper function."""
debug_log.write('Calling function: {}\n'.format(func.__name__))
res = func(*args, **kwargs)
debug_log.write('Return value: {}\n'.format(res))
return res
return callf
else:
return func
@trace
def square(x):
"""Calculate the square of the given number."""
return x * x
if __name__ == '__main__':
print(square(3))