我有通过HTTP完美工作的Flask方法:
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,在直接调用的情况下为空,因为参数直接传递给函数。
如何从代码中调用用@use_kwargs(args)
修饰的方法并正确传递给它?
答案 0 :(得分:1)
明智的做法是将烧瓶绑定与业务逻辑分开。每个绑定到任何第三方框架或库的情况都是如此。在你们中间,你们总会得到许多被污染的方法。与第三方的东西。
所以我建议你在不使用@use_kwargs装饰器的情况下实现你的get方法,并创建一个独立于flask的类。
然后将该类货车的一个对象包装到一个烧瓶装订对象中,该对象具有相同但装饰的方法。
通过这种方式,您可以灵活地按照自己设计的方式使用自己的逻辑,并明确区分关注点。
class FlaskBinding:
def _init_(self):
self.obj = PricePerPeriod()
@use_kwargs
def get(self,...):
return self.obj.get()