Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何获取Flask请求JSON数据作为字典?_Python_Json_Jquery_Dictionary_Flask - Fatal编程技术网

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

Python 如何获取Flask请求JSON数据作为字典?,python,json,jquery,dictionary,flask,Python,Json,Jquery,Dictionary,Flask,我正在努力使用jqueryajax方法和Flask,试图通过ajax调用来检索某种表单 我的js代码如下所示: $.ajax({ type: 'POST', url: '/projects/dummyName', data: JSON.stringify("{'ajax': 'True'}"), contentType: 'application/json;charset=UTF-8', dataType: 'html',

我正在努力使用jqueryajax方法和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")
@app.route('/projects/',methods=['GET','POST'])
def项目(名称=无):
打印(request.json)
打印(request.json['ajax'])
如果名称:
project=db.getProject(名称)
表单=项目表单(项目)
如果request.json['ajax']==True:
返回呈现模板(“myform.html”,form=form)
其他:
返回渲染模板(“projectView.html”,form=form)
其他:
返回渲染模板(“projects.html”)
因此,request.json返回一个字符串:

{'ajax':'True'}

当然,当尝试访问json['ajax']时,应用程序会中断,我收到一个错误的响应消息。我想这会给我一个python dict,因为否则,如果request.json和request.data都是字符串,那么它们之间会有什么区别呢

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

非常感谢您的帮助!
谢谢

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

@app.route('/projects/',methods=['GET','POST'])
def项目(名称=无):
req_json=request.get_json()
打印(请求json['ajax'])
如果名称:
project=db.getProject(名称)
表单=项目表单(项目)
如果请求json['ajax']:
返回呈现模板(“myform.html”,form=form)
返回渲染模板(“projectView.html”,form=form)
返回渲染模板(“projects.html”)

我目前没有访问我的开发机器的权限,所以我还没有测试过它,但根据我对文档的理解,它应该可以工作。

我最终使用$.get()检索表单并在request.args中传递'isajax'参数,这样在解析表单参数时它就不会与WTForms冲突。最后,我使用$.post()发送表单的内容。这似乎是最好的方法,因为需要一个表单或html更像是一个GET,而不是在头体中发送json数据的POST,只是为了请求一些东西。谢谢你的帮助!你看过这个链接了吗?我已经实现了这一点,它的工作非常好!
@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")