如何解析REST服务的POST参数?

侯曼

这次发布到REST服务时,似乎还有另一个JSON问题。我正在使用Flask-Restful

api.add_resource(Records, '/rest/records/<string:email>/<string:password>/<string:last_sync_date>')

parser = reqparse.RequestParser()
parser.add_argument('record_date', type=str)
parser.add_argument('records', type=str)
parser.add_argument('rating', type=str)
parser.add_argument('notes', type=str)

class Records(Resource):
    def post(self, email, password, last_sync_date):
        args = parser.parse_args()
        records = args['records'] # 'records' = None, but why? 
        return records, 201

单元测试:

resource_fields = {
            'record_date': fields.String,
            'rating': fields.Integer,
            'notes': fields.String,
            'last_updated': fields.DateTime,
        }
records = {"records":[]}
records["records"].append(marshal(record1, resource_fields))
    rv = self.app.post('/rest/records/{0}/{1}/{2}'.format(email, password, sync_date), data=json.dumps(records))

json.dumps(records)是:

str: {"records": [{"rating": 1, "notes": null, "last_updated": "Tue, 15 Oct 2013 15:52:44 -0000", "record_date": "2013-10-15 15:52:44.746815"}]}

为什么args['records']没有,我显然是通过电线发送的?

更新:

奇怪的是,当我发送单个对象时,它的所有花哨的东西。这么奇怪:

record = dict(record_date=record1.record_date, rating=record1.rating, notes=record1.notes, last_updated=record1.last_updated)

rv = self.app.post('/rest/records/{0}/{1}/{2}'.format(email, password, sync_date), data=record)

args

{'records': None, 'notes': None, 'task': None, 'record_date': '2013-10-15 16:48:40.662744', 'rating': '1'}
侯曼

我最终将此问题作为flask-resful github上的一个问题提出,并获得了适用于我的解决方案。归功于道格·布莱克(Doug Black)。

reqparse并不真正知道如何处理JSON。要处理JSON帖子,您将需要使用flask.request.json dict。

这是您可能想要的更新示例:

from flask import Flask, request
from flask.ext import restful

class Records(restful.Resource):
    def post(self, email, password, last_sync_date):
        records = request.json['records']
        return records, 201

app = Flask(__name__)
api = restful.Api(app)
api.add_resource(
    Records, 
    '/rest/records/<string:email>/<string:password>/<string:last_sync_date>'
)

request.json上的文档在这里。

您需要确保将内容类型标头设置为application / json,以便flask知道如何填充json字典。

self.app.post(
    '/rest/records/{0}/{1}/{2}'.format(email, password, sync_date), 
    data=json.dumps(records), 
    headers={'Content-Type': 'application/json'
)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何解析APEX REST服务的JSON响应

来自分类Dev

javascript如何解析参数?

来自分类Dev

git参数如何解析?

来自分类Dev

如何解析行参数?

来自分类Dev

如何解析/反序列化从C#中的REST服务返回的JSON

来自分类Dev

如何解析/反序列化从C#中的REST服务返回的JSON

来自分类Dev

Rspec Rake任务:如何解析参数?

来自分类Dev

如何解析可选的URL参数

来自分类Dev

如何解析发送jquery表的参数

来自分类Dev

模板参数如何解析/推导?

来自分类Dev

如何解析Gradle任务参数

来自分类Dev

如何解析JavaScript中的URL参数?

来自分类Dev

php如何解析url参数?

来自分类Dev

如何解析HTTP响应参数JAVA?

来自分类Dev

如何解析json的post方法?

来自分类Dev

如何解析服务器的正确IP地址?

来自分类Dev

如何解析PHP中的命令行参数?

来自分类Dev

node-webkit如何解析“打开”事件参数?

来自分类Dev

Java:如何解析Lambda参数的通用类型?

来自分类Dev

如何解析喷雾路由中的获取请求参数?

来自分类Dev

如何解析key:value格式的url参数?

来自分类Dev

Java:如何解析Lambda参数的通用类型?

来自分类Dev

您可以指定如何解析属性中的参数吗?

来自分类Dev

Bash:使用几个参数测试(内置):如何解析它们?

来自分类Dev

如何解析Angular中的默认查询参数

来自分类Dev

如何解析Twig自定义标签参数

来自分类Dev

ssh远程命令行参数如何解析

来自分类Dev

如何解析Ruby中带引号的参数列表?

来自分类Dev

如何解析电子邮件或电话号码参数?