首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不调用http的情况下直接从代码向webargs方法传递参数?

如何在不调用http的情况下直接从代码向webargs方法传递参数?
EN

Stack Overflow用户
提问于 2017-03-10 00:46:20
回答 1查看 537关注 0票数 2

我有一个通过HTTP完美工作的Flask方法:

代码语言:javascript
复制
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调用

但是,如果我试图从代码中调用这样的方法:

代码语言:javascript
复制
price_per_period = PricePerPeriod()
result = price_per_period.get(identifier_id, period, duration)

它在webargs检查参数时失败。

代码语言:javascript
复制
{"errors": {
    "period": [
        "Missing data for required field."
    ]
}}

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-10 00:55:47

明智的做法是将烧瓶绑定与业务逻辑分开。到任何第三方框架或库的每个绑定都是如此。如果你不这样做,你最终会得到许多方法,这些方法被第三方的东西“污染”了。

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

然后,该类van的对象被包装到一个flask binding对象中,该对象具有相同的但经过装饰的方法。

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

代码语言:javascript
复制
class FlaskBinding:
  def _init_(self):
    self.obj = PricePerPeriod()

  @use_kwargs
  def get(self,...):
    return self.obj.get()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42700923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档