Python Flask-Restful的POST方法不接受JSON参数。

7 浏览
0 Comments

Python Flask-Restful的POST方法不接受JSON参数。

我对Flask (和Flask-Restful)非常陌生。\n我的问题是:对于POST请求,json参数被设置为NONE(不起作用)。\n我能够从form-data中获取参数,使用Chrome的POSTMAN插件。但是,当我切换到raw(并提供json数据),它无法读取json并将NONE赋给所有参数。\n我阅读了一些相关的stackoverflow帖子,如link1link2link3 ...但是这些都没有帮助我。\n我正在使用Python 2.6,Flask-Restful 0.3.3,Flask 0.10.1,Chrome,Oracle Linux 6.5上的POSTMAN。\nPython代码app.py:\n

from flask import Flask, jsonify
from flask_restful import reqparse, abort, Api, Resource
app = Flask(__name__)
api = Api(app)
parser = reqparse.RequestParser()
parser.add_argument('username', type=str)
parser.add_argument('password', type=str)
class HelloWorld(Resource):
    def post(self):
        args = parser.parse_args()
        un = str(args['username'])
        pw = str(args['password'])
        return jsonify(u=un, p=pw)
api.add_resource(HelloWorld, '/testing')
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5444, debug=True)

\n使用POSTMAN进行测试:\n- 使用form-data:完全正常\n- 使用raw -> json:引发此问题\n尝试的方法1:\n在app.py的add_argument()方法中添加json参数\n

parser = reqparse.RequestParser()
parser.add_argument('username', type=str, location='json') # 添加json
parser.add_argument('password', type=str, location='json') # 添加json

\n输入:{ \"username\": \"hello\", \"password\": \"world\" }\n输出:{ \"p\": \"None\", \"u\": \"None\" }\n尝试的方法2:\n在app.py的add_argument()方法中将类型更改为unicode\n

parser = reqparse.RequestParser()
parser.add_argument('username', type=unicode, location='json') # 将类型更改为unicode
parser.add_argument('password', type=unicode, location='json') # 将类型更改为unicode

\n输入:{ \"username\": \"hello\", \"password\": \"world\" }\n输出:{ \"p\": \"None\", \"u\": \"None\" }\n附注:\n我会在每次失败的尝试后更新我的问题。\n如果需要更多信息以使问题更清晰,请告诉我。

0
0 Comments

Python Flask-Restful POST不接受JSON参数的问题出现的原因是请求中没有指定头部信息。解决方法是在请求中添加-H "Content-Type: application/json"头部信息。

在这个问题中,我们的应用程序使用了Flask和Flask-Restful库。定义了一个名为Item的资源类,其中包含了一个post方法用于处理POST请求。在post方法中,我们使用reqparse模块来解析请求参数,并将解析后的参数存储在args变量中。然后,我们可以通过args字典来获取特定的参数值。在这个例子中,我们获取了last_name、first_name和personal_data参数的值,并将其作为JSON格式的响应返回。

然后,我们可以使用json.dumps函数来生成JSON数据。最后,我们使用curl命令向应用程序发送POST请求。在第一次的请求中,我们没有指定Content-Type头部信息,导致应用程序无法正确解析JSON参数,从而引发了TypeError异常。为了解决这个问题,我们需要在请求中添加-H "Content-Type: application/json"头部信息。

通过添加头部信息后,我们再次向应用程序发送POST请求。这次请求被正确解析,并返回了预期的JSON响应。

此外,我们还展示了另一种更简化的处理方法。可以直接使用request.get_json()方法来获取JSON数据,并在该方法之后编写生成响应的代码。

总结起来,Python Flask-Restful POST不接受JSON参数的问题是因为请求中没有指定头部信息,解决方法是在请求中添加-H "Content-Type: application/json"头部信息。为了更简化处理,可以直接使用request.get_json()方法来获取JSON数据。

0
0 Comments

根据文档中的说明,对于POST请求中的JSON参数,应该将请求的mimetype设置为application/json。只有这样,Flask才会自动解析JSON数据到Request.json属性中,而Flask-Restful正是依赖于此来获取JSON数据的。

需要注意的是,新版本中的get_json函数提供了一个选项,可以强制将POST数据解析为JSON,而不考虑mimetype的设置。

根据以上问题描述,可以得出问题的原因是POST请求的mimetype没有设置为application/json,导致Flask无法自动解析JSON数据到Request.json属性中。

解决这个问题的方法是,在进行POST请求时,需要设置请求的mimetype为application/json。这样,Flask就会正确地解析JSON数据,并将其存储在Request.json属性中,从而Flask-Restful能够正常获取到JSON数据。此外,如果使用新版本的Flask,也可以直接使用get_json函数来强制解析POST数据为JSON格式,而不受mimetype的限制。

可以参考以下示例代码,来演示如何设置POST请求的mimetype为application/json

import requests
import json
url = 'http://example.com/api'
data = {'key1': 'value1', 'key2': 'value2'}
headers = {'Content-Type': 'application/json'}
response = requests.post(url, data=json.dumps(data), headers=headers)

以上代码中,通过设置headers参数中的Content-Typeapplication/json,将请求的mimetype设置为JSON类型。同时,将数据通过json.dumps方法转换为JSON字符串,并作为POST请求的数据传递。

通过以上的设置,就可以确保POST请求的数据以JSON格式进行传递,从而解决Request.json属性无法正确解析JSON数据的问题。

0
0 Comments

问题出现的原因是在使用Flask-Restful的POST方法时,无法正确获取JSON参数。解决方法是使用request.get_json()方法来获取JSON数据,并通过键值对的方式来获取参数。

在给出的代码中,定义了一个名为HelloWorld的资源类,其中的post方法用来处理POST请求。在方法中,通过request.get_json()方法获取JSON数据,并通过键值对的方式获取username和password参数。最后,使用jsonify将参数返回。

另外,有用户建议在POST请求中更改mimetype为'application/json',以确保正确地使用AJAX进行POST请求。

0