gpt4 book ai didi

python - 将查询参数传递给 Flask 装饰器

转载 作者:太空宇宙 更新时间:2023-11-04 01:13:05 25 4
gpt4 key购买 nike

我正在为我的 Flask 服务器设置一个 token 认证系统,我希望能够设置一个装饰器,看起来像这样:

@app.route('/my/data/')
@requires_token_auth
def get_my_endpoint_data():
"""Return JSON data""""
return get_data()

然后我会像/my/data?token=myawesometokenvalue 这样的端点

我已经设置了我的装饰函数

def requires_token_auth(f):
@wraps(f)
def wrapped(*args, **kwargs):
... do stuff ...
return f(*args, **kwargs)
return wrapped

不幸的是,'token' 参数在 args 中不可用。问题似乎是 Flask 传递了 req.view_args,而不是 req.args。

* 来自 flask 的 app.py *

1344         return self.view_functions[rule.endpoint](**req.view_args)

如何从包装函数内部访问查询参数?

最佳答案

因为这是“flask query parameters decorator”的第一个 google 结果,这是我最终在方法中的路径参数之上添加查询参数的解决方案:

def query_params(f):
"""
Decorator that will read the query parameters for the request.
The names are the names that are mapped in the function.
"""
parameter_names = inspect.getargspec(f).args

@wraps(f)
def logic(*args, **kw):
params = dict(kw)

for parameter_name in parameter_names:
if parameter_name in request.args:
params[parameter_name] = request.args.get(parameter_name)

return f(**params)

return logic

@app.route('/hello/<uid>', methods=['GET', 'POST'])
@query_params
def hello_world(uid, name):
return jsonify({
'uid': uid,
'name': name
})

关于python - 将查询参数传递给 Flask 装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26456678/

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