Python flask_restful 个参数
Python flask_restful arguments
我正在使用 flask_restful 创建测试 API 的服务器端,它将捕获进入 API 的带有 ID 和 3 个参数的请求。如果 Id 不存在,则会创建它并使用 3 个数据参数进行填充。资产已创建,但只有第三个参数被添加到字典中。
我有代码:
from flask import Flask, request
from flask_restful import reqparse, abort, Api, Resource
app = Flask(__name__)
api = Api(app)
assets = {}
def abort_if_asset_doesnt_exist(asset_id):
if asset_id not in assets:
abort(404, message="Asset {} doesn't exist".format(asset_id))
parser = reqparse.RequestParser()
parser.add_argument('data1', type=str)
parser.add_argument('data2', type=str)
parser.add_argument('data3', type=str)
class Asset(Resource):
def get(self, asset_id):
return {asset_id: assets[asset_id]}
def put(self, asset_id):
assets[asset_id] = request.form['data1']
assets[asset_id] = request.form['data2']
assets[asset_id] = request.form['data3']
return {asset_id: assets[asset_id]}
def delete(self, asset_id):
abort_if_todo_doesnt_exist(asset_id)
del assets[asset_id]
return '', 204
api.add_resource(Asset, '/api-v1.0/add/<string:asset_id>', methods=['PUT', 'GET'])
if __name__ == '__main__':
app.run(debug=True)
我想获取 id 并在字典中创建一个 'instance',并附加相应的数据字段。如下图
我想要的:
{
"123456" {
"data1":"Mydata1"
"data2":"Mydata2"
"data3":"Mydata3"
}
}
有了这个,我可以调用资产并接收它的关联数据字段。
我使用的 curl (PUT) 命令如下所示。
$ curl http://localhost:5000/api-v1.0/add/123456 -d "data1=Mydata1" -d "data2=Mydata2" -d "data3=Mydata3" -X PUT
这是因为您只是将一个值一个接一个地分配给资产字典中 asset_id 指定的位置。由于分配给资产的最后一个值是第三个参数,因此这是该键中包含的值。
要解决此问题,您需要更改该代码,为要存储表单数据的 asset_id 创建字典:
assets[asset_id] = dict()
assets[asset_id]['data1'] = request.form['data1']
assets[asset_id]['data2'] = request.form['data2']
assets[asset_id]['data3'] = request.form['data3']
或者更好地使用 defaultdict:
assets = defaultdict(dict)
...
assets[asset_id]['data1'] = request.form['data1']
我正在使用 flask_restful 创建测试 API 的服务器端,它将捕获进入 API 的带有 ID 和 3 个参数的请求。如果 Id 不存在,则会创建它并使用 3 个数据参数进行填充。资产已创建,但只有第三个参数被添加到字典中。
我有代码:
from flask import Flask, request
from flask_restful import reqparse, abort, Api, Resource
app = Flask(__name__)
api = Api(app)
assets = {}
def abort_if_asset_doesnt_exist(asset_id):
if asset_id not in assets:
abort(404, message="Asset {} doesn't exist".format(asset_id))
parser = reqparse.RequestParser()
parser.add_argument('data1', type=str)
parser.add_argument('data2', type=str)
parser.add_argument('data3', type=str)
class Asset(Resource):
def get(self, asset_id):
return {asset_id: assets[asset_id]}
def put(self, asset_id):
assets[asset_id] = request.form['data1']
assets[asset_id] = request.form['data2']
assets[asset_id] = request.form['data3']
return {asset_id: assets[asset_id]}
def delete(self, asset_id):
abort_if_todo_doesnt_exist(asset_id)
del assets[asset_id]
return '', 204
api.add_resource(Asset, '/api-v1.0/add/<string:asset_id>', methods=['PUT', 'GET'])
if __name__ == '__main__':
app.run(debug=True)
我想获取 id 并在字典中创建一个 'instance',并附加相应的数据字段。如下图
我想要的:
{
"123456" {
"data1":"Mydata1"
"data2":"Mydata2"
"data3":"Mydata3"
}
}
有了这个,我可以调用资产并接收它的关联数据字段。
我使用的 curl (PUT) 命令如下所示。
$ curl http://localhost:5000/api-v1.0/add/123456 -d "data1=Mydata1" -d "data2=Mydata2" -d "data3=Mydata3" -X PUT
这是因为您只是将一个值一个接一个地分配给资产字典中 asset_id 指定的位置。由于分配给资产的最后一个值是第三个参数,因此这是该键中包含的值。
要解决此问题,您需要更改该代码,为要存储表单数据的 asset_id 创建字典:
assets[asset_id] = dict()
assets[asset_id]['data1'] = request.form['data1']
assets[asset_id]['data2'] = request.form['data2']
assets[asset_id]['data3'] = request.form['data3']
或者更好地使用 defaultdict:
assets = defaultdict(dict)
...
assets[asset_id]['data1'] = request.form['data1']