如何在 Flask-RESTless 中使用关键字参数

Posted

技术标签:

【中文标题】如何在 Flask-RESTless 中使用关键字参数【英文标题】:How to use the keyword arguments in Flask-RESTless 【发布时间】:2015-04-04 11:02:17 【问题描述】:

我和一个伙伴一直在阅读 Flask-RESTless 的文档,上面写着:

预处理器和后处理器函数的参数将作为关键字参数提供,因此在定义预处理器或后处理器函数时,应始终添加 **kw 作为最终参数。

但它没有指定我们如何使用这些关键字参数将信息传递给预处理器或后处理器。谁能告诉我们怎么做?

我们的 create_api 现在看起来像这样:

create_api(Foo,
           methods=['GET', 'POST', 'PUT', 'DELETE'],
           collection_name='p',
           url_prefix='/api/v1',
           primary_key='uid',
           exclude_columns=['id'],
           preprocessors=
              'POST': [authenticate, validation_preprocessor],
              'GET_SINGLE': [authenticate],
              'GET_MANY': [authenticate],
              'PUT_SINGLE': [authenticate, validation_preprocessor],
              'PUT_MANY': [authenticate, validation_preprocessor],
              'DELETE': [authenticate]
           )

def validation_preprocessor(data=None, **kw):
    # Do stuff
    pass

我们想要做的是在validation_preprocessor中使用**kw作为我们自己的值。

【问题讨论】:

【参考方案1】:

通过阅读文档,您不会将数据传递给预处理器,您预处理器,数据会传递给

数据的具体格式取决于具体的方法:

https://flask-restless.readthedocs.org/en/latest/customizing.html#request-preprocessors-and-postprocessors

每种请求类型的预处理器和后处理器接受不同的参数。它们中的大多数应该没有返回值(更具体地说,任何返回值都被忽略)......那些接受字典作为参数的预处理器和后处理器可以(并且应该)就地修改它们的参数。

您不直接使用 *kw,它只是为了让您的代码向前兼容 Flask-RESTLess,因此如果他们决定更新 API 并向您的函数发送一组不同的参数,它不会中断.

在您的特定示例中,您只需编辑 data 字典,并且由于 Python 变量是 pass by assignment,因此一旦您对其进行了编辑,它将针对链的其余部分进行编辑。

def validation_preprocessor(data=None, **kw):
    if data:
        data["foobar"] = "rarr I'm a dinosaur"

我个人认为这令人困惑,而不是我期望的工作方式,但我认为他们有这样做的理由。

【讨论】:

感谢您的解释!帮了大忙=) 太棒了!我很高兴。 :)

以上是关于如何在 Flask-RESTless 中使用关键字参数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Flask-Restless启用CORS

如何使用 Flask-Restless 启用 CORS

如何使用 Flask-Restless 按日期搜索模型

使用请求时如何为 Flask-Restless 构建复杂的过滤器?

flask-restless 限制 RESTful api 访问

使用 flask-restless 创建 API 响应