gpt4 book ai didi

python - 如何直接从代码将参数传递给 webargs 方法而不进行 http 调用?

转载 作者:太空宇宙 更新时间:2023-11-03 15:33:47 24 4
gpt4 key购买 nike

我有 Flask 方法,可以通过 HTTP 完美运行:

class PricePerPeriod(Resource):

args = {'period': fields.Int(required=True, validate=lambda val: val > 0),
'duration': fields.Int(required=True, validate=lambda val: val > 0)}

@use_kwargs(args)
def get(self, identifier_id, period, duration):

api.add_resource(PricePerPeriod, '/price/<int:identifier_id>/')

像这样的调用 http://localhost:8080/price/21/?period=1&duration=60

但是,如果我尝试从代码中调用此类方法:

price_per_period = PricePerPeriod()
result = price_per_period.get(identifier_id, period, duration)

webargs 参数检查失败。

{"errors": {
"period": [
"Missing data for required field."
]
}}

我只能假设 @use_kwargs(args) 期望 args 被填充,在直接调用的情况下,args 为空,因为参数直接传递给函数。

如何调用用 @use_kwargs(args) 修饰的方法从代码中正确传递参数并传递给它?

最佳答案

将 flask 绑定(bind)与业务逻辑分开是明智的。对于任何第三方框架或库的每次绑定(bind)都是如此。如果你不这样做,你最终总会得到许多被第三方东西“污染”的方法。

因此,我建议您在不使用 @use_kwargs 装饰器的情况下实现 get 方法,并创建一个独立于 Flask 的类。

该类的对象将被包装到一个 Flask 绑定(bind)对象中,该对象具有相同但经过修饰的方法。

这样,您就可以按照自己的设计方式灵活地使用自己的逻辑,并清晰地分离关注点。

class FlaskBinding:
def _init_(self):
self.obj = PricePerPeriod()

@use_kwargs
def get(self,...):
return self.obj.get()

关于python - 如何直接从代码将参数传递给 webargs 方法而不进行 http 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42700923/

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