解释这怎么行不通? ( Flask-restful API)

问题描述 投票:0回答:1

我正在使用一些几个月前有效的代码,它使用 Flask 和 Flask_restful 来工作,我发现了一些非常奇怪的东西,API 不起作用,但没有给我一个错误,从 flask_restful 我使用 reqparse 到获取参数,但是每当我使用 .parse_args() 方法时,我必须给出的响应都不会通过

代码示例:

class Ping (Resource):
    def get(self):
        parser = reqparse.RequestParser()
        parser.add_argument ("lang")
        # args = parser.parse_args()
        return {
            "message": "any message",
        }, 200

回复:

{
    "message": "any message"
}

但是当我使用 parse_args() 甚至不使用变量时:

代码:

class Ping (Resource):
    def get(self):
        parser = reqparse. RequestParser()
        parser.add_argument("lang")
        args = parser.parse_args()
        return {
            "message": "any message",
        }, 200

回复:

{
    "message": "Failed to decode JSON object: None"
}

有人可以解释发生了什么吗?发生了什么事?

我正在使用 python 3.8

我希望代码中给出消息,但我每次都会收到这条消息,我尝试了不同的路径,重写类,但没有任何效果,如果有人知道如何解决这个问题或者如果有人知道如何获得url 的参数在某种程度上会很有帮助。

python api http flask flask-restful
1个回答
0
投票

我刚刚找到了解决方案,我在这篇文章中看到了解决方案:Flask-Limiter is not called on Flask-Restful API's method_decorators

这个问题的解决方案非常简单,当在解析器中添加一个参数时,您必须传递一个名为“location”的参数,这将是您调用 parse_args() 时变量的名称

举个例子:

而不是这个

    parser = reqparse.RequestParser()

    parser.add_argument("lang")

    args = parser.parse_args()

写这个:

    parser = reqparse.RequestParser()

    parser.add_argument("lang", location='args')

    args = parser.parse_args()

如果您在位置中传递的名称与 parser.parse_args() 的值不同,即使在 url 中为参数提供了一个值,它也会为您提供空值

© www.soinside.com 2019 - 2024. All rights reserved.