Я пытаюсь создать собственный декоратор для своей функции, но я немного запутался.Я проиллюстрировал свою путаницу на примере.Я работаю с колбой, и я хотел бы создать декоратор для проверки подлинности пользователя.Этот декоратор будет использовать значение, переданное из конечной точки / маршрутизируемого параметра.
def require_jwt(func):
@wraps(func)
def attempt_authentication(jwt_token, *args, **kwargs):
print(jwt_token)
print(list(args))
return(jsonify({})) #Avoiding compiler error
return attempt_authentication
@app.route('/endpoint-that-needs-jwt/<string:jwt_token>', methods=['POST'])
@require_jwt
def sign_up(id_token):
pass
Предполагается, что я выполняю запрос POST к конечной точке, где jwt_token
сопоставляется с "somejwt"
...
Вывод кода был просто:
"somejwt"
[]
Я ожидал, что он будет больше похож на:
"somejwt"
["somejwt"]
Я действительно не понимаю, почему я не могупросто используйте args[0]
вместо jwt_token
.Разве * args не ссылаются на все аргументы в функции?Если бы кто-то мог помочь мне устранить путаницу и объяснить сферу охвата, я был бы признателен.
Редактировать: Некоторые предположили, что это возможно, потому что я уже добавляю jwt_token в параметры функции try_authentication.С тех пор я попробовал следующее, и мой вывод все еще пустой массив:
def require_jwt(func):
@wraps(func)
def attempt_authentication(*args, **kwargs):
print(list(args))
return(jsonify({})) #Avoiding compiler error
return attempt_authentication
@app.route('/endpoint-that-needs-jwt/<string:jwt_token>', methods=['POST'])
@require_jwt
def sign_up(id_token):
pass