如何从烧瓶中的“ImmutableMultiDict”获取数据
Posted
技术标签:
【中文标题】如何从烧瓶中的“ImmutableMultiDict”获取数据【英文标题】:how to get data from 'ImmutableMultiDict' in flask 【发布时间】:2015-05-19 09:47:45 【问题描述】:我正在学习如何使用 ajax 和 Flask,所以我要做的是发送一个 ajax 请求并在我的 python 文件中以post
请求的形式接收数据
My html file contains this code
var data = "name":"John Doe","age":"21";
$.ajax(
url:'/post/data',
datatype : "json",
contentType: "application/json; charset=utf-8",
data : JSON.stringify(data),
success : function(result)
jQuery("#***").html(result);
,error : function(result)
console.log(result);
);
我的 python 文件包含:
@app.route('/post/data',methods=['GET','POST'])
def postdata():
#do some
data = str(request.args)
json_dumps = json.dumps(data)
return json_dumps
这给了我页面上的以下数据
"ImmutableMultiDict([('\"name\":\"John Doe\",\"age\":\"21\"', u'')])"
这就是我的request.query_string
看起来%22name%22:%22John%20Doe%22,%22age%22:%2221%22
那么我如何获得name
和age
。如果我在任何地方错了,请纠正我。在此先感谢。
【问题讨论】:
使用request.json.get('name')
【参考方案1】:
您实际上不需要从ImmutableMultiDict
获取数据。您所拥有的内容中有几个错误阻止您将响应作为 json 数据提取。首先,您必须稍微调整 ajax 调用的参数。您应该将调用类型添加为POST
。此外,datatype
应拼写为dataType
。你的新电话应该是:
var data = "name":"John Doe","age":"21";
$.ajax(
type: 'POST',
contentType: 'application/json',
url: '/post/data',
dataType : 'json',
data : JSON.stringify(data),
success : function(result)
jQuery("#***").html(result);
,error : function(result)
console.log(result);
);
数据现在实际上是作为 json
类型的发布请求发送的。在 Flask 服务器上,我们现在可以读取数据作为子信息,如下所示:
@app.route('/post/data',methods=['GET','POST'])
def postdata():
jsonData = request.get_json()
print jsonData['name']
print jsonData['age']
return "hello world" #or whatever you want to return
这将成功打印John Doe
和21
。
让我知道这是否适合您或如果您有任何其他问题!
编辑:您可以从烧瓶中返回成功到 ajax 调用,如下所示:
# include this import at the tomb
from flask import jsonify
@app.route('/post/data',methods=['GET','POST'])
def postdata():
...
return jsonify(success=True, data=jsonData)
【讨论】:
此方法工作正常.. 数据根据我的需要在 python 文件中接收,但在 ajax 中它返回到error
函数。
你的函数返回了什么?我会给你一个解决方案。基本上,你希望函数返回什么,你希望#***
显示什么?
好的,我明白了。我应该从我的函数作为一些数据(Json)返回到 ajax,这样它就会成功接收,否则只会出错。谢谢你的帮助
是的,只是在答案中添加了正确的方法。
这里要注意的是,除了dataType
之外,您始终需要在ajax 请求中指定contentType
。 ***.com/questions/14322984/…【参考方案2】:
只需在 request.form 对象上调用 to_dict 例如,http://www.seanbehan.com/how-to-get-a-dict-from-flask-request-form/
【讨论】:
这是我需要的答案。【参考方案3】:我来到这个页面是因为我正在尝试使用 AJAX 发送表单,我终于找到了解决方案。解决方案是跳过 JSON(希望这会帮助其他人进行相同的搜索):
$.ajax(
type: "POST",
url: my_url,
data: $("#formID").serialize(), //form containing name and age
success: function(result)
console.log(result);
);
然后,在 Flask 服务器上:
app.route('/my_url', methods = [POST])
def some_function():
name = request.form['name']
age = request.form['age']
# do what you want with these variables
return 'You got it right'
【讨论】:
【参考方案4】:我通过像这样将 contentType 添加为 application/JSON 解决了这个问题
data =
type:'POST',
contentType:'application/json',
otherData: 'foo'
您现在可以像这样访问烧瓶后端中的数据:
app.route('/my_url', methods = ["POST"])
def some_function():
other_data = request.form['otherData']
# do something
注意:我使用的是原生 javascript 而不是 jQuery
【讨论】:
以上是关于如何从烧瓶中的“ImmutableMultiDict”获取数据的主要内容,如果未能解决你的问题,请参考以下文章