【问题标题】:Posting JSON to Flask view using Requests returns 404使用请求将 JSON 发布到 Flask 视图返回 404
【发布时间】:2015-09-09 18:31:14
【问题描述】:

我想使用请求将 JSON 数据发布到 Flask 视图。但是,当我提出请求时,我得到了 404。为什么我的代码不起作用?如何正确发布 JSON 数据?

@app.route('/foo/<foo>', defaults={'foo': 'foo'})
@app.route('/foo/<foo>')
def foo(foo):
    print "here"
    data = request.get_json(force=True)
    print data
    k = data.get('k', 20)  
    return jsonify(k=k, foo=foostatus='ok')

import requests
params = {'k': 2}
d = requests.get('http://localhost:9090/foo', params=params)

Flask 为请求记录 404。

127.0.0.1 - - [09/Sep/2015 11:26:26] "GET /foo?k=2 HTTP/1.1" 404 -

【问题讨论】:

  • 你试过 json.dumps 作为参数吗?
  • 我收到一个奇怪的错误 "GET /foo?%7B%k%22:%202%7D HTTP/1.1" 404 -
  • 看,我有类似的问题,但我没有使用 request.get_json()。如果你愿意,我可以发布我为完成任务所做的事情。
  • @VivekAnand:你当然可以发布你的解决方案
  • 这个错误看起来并不奇怪。它只是向您显示您所做的查询,服务器告诉您资源不存在。听起来不错。

标签: python json flask python-requests


【解决方案1】:
  • 发出带有 JSON 数据的 post 请求,而不是带有查询参数的 get 请求。路由也需要允许POST 方法。
  • 404 是因为您不会使用匹配/foo/&lt;foo&gt; 的模式。更改默认路由以排除&lt;foo&gt;,或转到正确的网址。
  • 当请求具有正确的 mimetype 时,您不需要将 force=Trueget_json 一起使用。
  • foo=foostatus='ok' 调用中的 foo=foostatus='ok' 语法无效。
  • 传递 status 值是多余的,因为 200 响应代码暗示了这一点。
@app.route('/hello', defautls={'name': 'world'}, methods=['POST'])
@app.route('/hello/<name>', methods=['POST'])
def hello(name):
    print(name)  # will be 'world' when going to bare /foo
    data = request.get_json()
    k = data.get('k', 20)
    return jsonify(k=k, status='ok')

requests.post('http://localhost/hello', json={'k': 2})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-15
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 2018-04-29
    • 2018-06-03
    相关资源
    最近更新 更多