我有一个通过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被填充,在直接调用的情况下,args是空的,因为参数被直接传递给函数。
如何从代码中调用用@use_kwargs(args)修饰的方法,并将参数正确传递给它?
发布于 2017-03-10 00:55:47
明智的做法是将烧瓶绑定与业务逻辑分开。到任何第三方框架或库的每个绑定都是如此。如果你不这样做,你最终会得到许多方法,这些方法被第三方的东西“污染”了。
因此,我建议您在不使用@use_kwargs装饰器的情况下实现get方法,并创建一个独立于flask的类。
然后,该类van的对象被包装到一个flask binding对象中,该对象具有相同的但经过装饰的方法。
这样,您就可以按照jou设计的方式灵活地使用自己的逻辑,并且可以清晰地分离关注点。
class FlaskBinding:
def _init_(self):
self.obj = PricePerPeriod()
@use_kwargs
def get(self,...):
return self.obj.get()https://stackoverflow.com/questions/42700923
复制相似问题