gpt4 book ai didi

python - 使用方法自动验证函数参数

转载 作者:行者123 更新时间:2023-11-28 22:46:22 24 4
gpt4 key购买 nike

有什么方法可以在 Python 3 中将装饰器附加到以下函数,从而避免调用 _is_valid_token()?我会将这个静态值作为 key 传递给每个函数,以通过 SSL 调用 API 并希望简化我的代码。

# Constants
TOKEN = '7632ba6a-0609-4b0c-a92e-9107bec88941'


@app.route('/my-game-server/api/v1.0/create_new_game/<token>/<player1>/<player2>/<rules>',
methods=['GET'])
def create_new_game(token, player1, player2, rules):
# Create
"""Creates a new game from scratch

:param token: Unique value that verifies the caller is valid
:param player1: Name of the first player
:param player2: Name of the second player
:param rules: String representing the rules to be used in the game
:return: UUID representing the game id that has been created
"""
# Validate token
_is_valid_token(token)

# Create game
game_id = str(uuid.uuid4())

return game_id


def _is_valid_token(token):
"""Validate that the caller has a legitimate call into the service

:param token: Unique value that verifies the caller is valid
"""
if token != TOKEN:
abort(400)

最佳答案

您可以使用 url processor .

@app.url_value_preprocessor
def _is_valid_token(endpoint, values):
if 'token' not in values:
return

if values['token'] != TOKEN:
abort(400)

这适用于所有路由,但仅在路由实际具有“ token ​​”值时才进行验证。当然,您可以事先进行许多其他检查来限制验证,例如将其基于特定端点名称,但这是最通用的功能。


您也可以只装饰要验证的特定功能。这比 Flask 解决方案更通用。

def _is_valid_token(f):
@wraps(f)
def decorated(token, *args, **kwargs):
if token != TOKEN:
abort(400)

return f(token, *args, **kwargs):

return decorated

@app.route(...)
@_is_valid_token
def create_new_game(token, ...):
...

关于python - 使用方法自动验证函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27551521/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com