【问题标题】:Flask request.args vs request.form烧瓶 request.args 与 request.form
【发布时间】:2014-06-13 03:08:05
【问题描述】:

我的理解是,Flask 中的request.args 包含来自GET 请求的URL 编码参数,而request.form 包含POST 数据。我很难理解的是为什么在发送POST 请求时,尝试使用request.form 访问数据会返回400 错误,但是当我尝试使用request.args 访问它时似乎工作正常.

我尝试使用Postmancurl 发送请求,结果相同。

curl -X POST -d {"name":"Joe"} http://127.0.0.1:8080/testpoint --header "Content-Type:application/json"

代码:

@app.route('/testpoint', methods = ['POST'])
def testpoint():
    name = request.args.get('name', '')
    return jsonify(name = name)

【问题讨论】:

    标签: python rest curl post flask


    【解决方案1】:

    您正在发布 JSON,request.argsrequest.form 都不起作用。

    request.form 仅在您使用正确的内容类型发布数据时有效表单数据 使用application/x-www-form-urlencoded or multipart/form-data 编码发布。

    当您使用application/json 时,您不再发布表单数据。改用request.get_json() 访问 JSON POST 数据:

    @app.route('/testpoint', methods = ['POST'])
    def testpoint():
        name = request.get_json().get('name', '')
        return jsonify(name = name)
    

    正如您所说,request.args 仅包含请求查询字符串中包含的值,即? 问号之后的 URL 的可选部分。由于它是 URL 的一部分,因此它独立于 POST 请求正文。

    【讨论】:

      【解决方案2】:

      你curl中的json数据不对,所以Flask不会解析数据形成。

      像这样发送数据:'{"name":"Joe"}'

      curl -X POST -d '{"name":"Joe"}' http://example.com:8080/testpoint --header "Content-Type:application/json"
      

      【讨论】:

      • 问题是 OP 首先发布 JSON,然后使用 form data 的方法来访问信息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-07
      • 2018-01-31
      • 1970-01-01
      • 2017-09-03
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多