如何获取 Flask 请求 JSON 数据作为字典?

Posted

技术标签:

【中文标题】如何获取 Flask 请求 JSON 数据作为字典?【英文标题】:How to obtain Flask request JSON data as dictionary? 【发布时间】:2013-11-26 15:16:48 【问题描述】:

我正在努力使用 JQuery ajax 方法和 Flask,试图进行 ajax 调用以检索一些表单。

我的 js 代码如下所示:

$.ajax(
       type: 'POST',
       url: '/projects/dummyName',
       data: JSON.stringify("'ajax': 'True'"),
       contentType: 'application/json;charset=UTF-8',
       dataType: 'html',
       success: function(responseData, textStatus, jqXHR) 
           $("#myform").text(responseData);
         ,
       error: function (responseData, textStatus, errorThrown) 
           alert('Error: '+errorThrown + ". Status: "+textStatus);
       
); 

基本上我添加数据参数让服务器方法认为这是一个 ajax 调用。但我只是无法将服务器中的数据作为字典获取。尝试了万种方法,我无法使其工作。

这是虚拟服务器方法:

@app.route('/projects/<name>', methods=['GET', 'POST'])
def projects(name=None):
    print(request.json)
    print(request.json['ajax'])
    if name:
        project = db.getProject(name)
        form = ProjectForm(project)

        if request.json['ajax'] == True:
            return render_template("myform.html", form=form)
        else:
            return render_template("projectView.html", form=form)
    else:
        return render_template("projects.html")

所以,request.json 返回一个字符串:

'ajax': '真'

当然,当尝试访问 json['ajax'] 时应用程序会中断,并且我收到 BAD RESPONSE 错误消息。我认为这会给我一个 python dict,因为如果两者都是字符串,request.json 和 request.data 之间会有什么区别。

如何获得一个包含在 ajax 调用中传递的所有数据的 python 字典?这是否取决于我定义 contentType 的方式?是否依赖于 JSON.stringify 的使用?

我们将不胜感激! 谢谢

【问题讨论】:

你看过这个链接吗? flask.pocoo.org/docs/patterns/jquery我已经实现了这个,效果很好! 【参考方案1】:

由于请求的 mimetype,数据被放入 request.json。我相信你在找get_json

@app.route('/projects/<name>', methods=['GET', 'POST'])
def projects(name=None):
    req_json = request.get_json()
    print(req_json['ajax'])
    if name:
        project = db.getProject(name)
        form = ProjectForm(project)

        if req_json['ajax']:
            return render_template("myform.html", form=form)
        return render_template("projectView.html", form=form)
    return render_template("projects.html")

我目前无法访问我的开发机器,所以我没有对此进行测试,但根据我对文档的理解,它应该可以工作。

【讨论】:

我最终使用 $.get() 来检索表单并在 request.args 中传递 'isajax' 参数,这样在解析表单参数时它不会与 WTForms 冲突。最后我使用 $.post() 发送表单的内容。这似乎是最好的方法,因为需要表单或 html 更多的是 GET 而不是 POST 在标题正文中发送 json 数据,只是为了请求一些东西。感谢您的帮助!

以上是关于如何获取 Flask 请求 JSON 数据作为字典?的主要内容,如果未能解决你的问题,请参考以下文章

flask怎么获取请求报头信息

初学flask

python flask里 post请求,JSON数据获取方式总结

Python Flask:如何将字典对象转换为 json? [复制]

[flask] flask api + vue 跨域问题

Python json函数与Flask jsonify函数