如何修复装饰器中缺少的参数?
How to fix missing argument in decorator?
我收到这个错误是因为我假设来自我的装饰器:
TypeError: update_wrapper() missing 1 required positional argument: 'wrapper'
这是我的装饰器:
def authenticate_restful(f):
@wraps
def decorated_function(*args, **kwargs):
response_object = {
'status': 'fail',
'message': 'Provide a valid auth token.'
}
auth_header = request.headers.get('Authorization')
if not auth_header:
return jsonify(response_object), 403
auth_token = auth_header.split(' ')[1]
resp = User.decode_auth_token(auth_token)
if isinstance(resp, str):
response_object['message'] = resp
return jsonify(response_object), 401
user = User.query.filter_by(id=resp['sub']).first()
if not user or not user.active:
return jsonify(response_object), 401
return f(resp, *args, **kwargs)
return decorated_function
我正在 运行 测试这段代码,但我不知道如何调试它。
为什么它可能缺少包装器参数?
functools.wraps
需要位置参数。由于您没有提供它,因此它会给您一个错误。您需要这样做:
def authenticate_restful(f):
@wraps(f)
...
我收到这个错误是因为我假设来自我的装饰器:
TypeError: update_wrapper() missing 1 required positional argument: 'wrapper'
这是我的装饰器:
def authenticate_restful(f):
@wraps
def decorated_function(*args, **kwargs):
response_object = {
'status': 'fail',
'message': 'Provide a valid auth token.'
}
auth_header = request.headers.get('Authorization')
if not auth_header:
return jsonify(response_object), 403
auth_token = auth_header.split(' ')[1]
resp = User.decode_auth_token(auth_token)
if isinstance(resp, str):
response_object['message'] = resp
return jsonify(response_object), 401
user = User.query.filter_by(id=resp['sub']).first()
if not user or not user.active:
return jsonify(response_object), 401
return f(resp, *args, **kwargs)
return decorated_function
我正在 运行 测试这段代码,但我不知道如何调试它。 为什么它可能缺少包装器参数?
functools.wraps
需要位置参数。由于您没有提供它,因此它会给您一个错误。您需要这样做:
def authenticate_restful(f):
@wraps(f)
...