Параметры не регистрируются в * args с Decorator в Flask - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь создать собственный декоратор для своей функции, но я немного запутался.Я проиллюстрировал свою путаницу на примере.Я работаю с колбой, и я хотел бы создать декоратор для проверки подлинности пользователя.Этот декоратор будет использовать значение, переданное из конечной точки / маршрутизируемого параметра.

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
...