Python flask_restful参数

时间:2015-07-09 13:06:03

标签: python flask flask-restful

我正在使用flask_restful创建测试API的服务器端,它将使用ID和3个参数捕获进入API的请求。如果Id不存在,则使用3个数据参数创建并填充它。创建资产,但只有第3个参数被添加到dict。

代码我:

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

1 个答案:

答案 0 :(得分:2)

这是因为您只是将一个接一个的值分配给assets dict中asset_id指定的位置。由于分配给assets的最后一个值是第3个参数,因此该键包含该值。

要解决此问题,您需要更改该代码,以便为要存储表单数据的asset_id创建一个dict:

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']