flask - 如何从JSON GET请求获取参数

时间:2014-09-26 23:29:36

标签: python json flask

我有一个客户端api发出以下GET请求:

"GET /tasks/5fe7eabd-842e-40d2-849e-409655e0891d?{%22task%22:%22hello%22,%22url%22:%22/tasks/5fe7eabd-842e-40d2-849e-409655e0891d%22}&_=1411772296171 HTTP/1.1" 200 -

否则

task = request.args
print task

表明它是

ImmutableMultiDict([('{"task":"hello","url":"/tasks/5fe7eabd-842e-40d2-849e-409655e0891d"}', u''), ('_', u'1411772296171')])

获得"任务"价值,如果我这样做:

  request.args.getlist('task')

我得到[]而不是hello。关于如何从中挖出你好的任何想法?

2 个答案:

答案 0 :(得分:4)

在这里忽略request.args;你在这里没有表格编码的查询参数。

使用request.query_string代替,分割缓存断开器(&_=<random number>),解码网址引用并将结果提供给json.loads()

from urllib import unquote
from flask import json

data = json.loads(unquote(request.query_string.partition('&')[0]))
task = data.get('task')

演示:

>>> request.query_string
'{%22task%22:%22hello%22,%22url%22:%22/tasks/5fe7eabd-842e-40d2-849e-409655e0891d%22}&_=1411772296171'
>>> from urllib import unquote
>>> from flask import json
>>> unquote(request.query_string.partition('&')[0])
'{"task":"hello","url":"/tasks/5fe7eabd-842e-40d2-849e-409655e0891d"}'
>>> json.loads(unquote(request.query_string.partition('&')[0]))
{u'url': u'/tasks/5fe7eabd-842e-40d2-849e-409655e0891d', u'task': u'hello'}

答案 1 :(得分:-1)

使用request object,您应该可以使用request.args.get('key', 'default')来获取所需的参数。

request.args.get('task', None)