我正在使用Python Flask-Restful w / pymongo为新的Web服务构建API。
一个样例的MongoDB文档应如下所示:
{ domain: 'foobar.com',
attributes: { web: [ akamai,
google-analytics,
drupal,
... ] } }
进口:
from flask import Flask, jsonify
from flask.ext.restful import Api, Resource, reqparse
from pymongo import MongoClient
班级:
class AttributesAPI(Resource):
def __init__(self):
self.reqparse = reqparse.RequestParser()
self.reqparse.add_argument('domain', type = str, required = True, help = 'No domain given', location='json')
self.reqparse.add_argument('web', type = str, action='append', required = True, help = 'No array/list of web stuff given', location = 'json')
super(AttributesAPI, self).__init__()
def post(self):
args = self.reqparse.parse_args()
post = db.core.update( {'domain': args['domain']},
{'$set':{'attr': { 'web': args['web'] }}},
upsert=True)
return post
当我用CURL发布时,我使用以下代码:
curl -i -H "Content-Type: application/json" -X POST -d '{"domain":"foobar", "web":"akamai", "web":"drupal", "web":"google-analytics"}' http://localhost:5000/v1/attributes
但是,这就是保存在我的文档中的内容:
{ "_id" : ObjectId("5313a9006759a3e0af4e548a"), "attr" : { "web" : [ "google-analytics" ] }, "domain" : "foobar.com"}
它仅存储curl中给定的'web'的最后一个值。我还尝试按reqparse文档中所述将CLI命令与多个-d参数一起使用,但是会引发400-错误请求错误。
有什么想法为什么为什么只保存最后一个值而不是将所有值保存为列表?
在JSON对象和Python字典中,名称是唯一的;您无法在web
此处重复该密钥并期望它能正常工作。请改用一个 web
键,并将值设为列表:
{"domain": "foobar", "web": ["akamai", "drupal", "google-analytics"]}
并且应该这样处理。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句