2015-09-09 52 views
0

我想使用請求將JSON數據發佈到Flask視圖。但是,當我提出請求時,我得到了一個404。爲什麼我的代碼不工作?如何正確發佈JSON數據?使用請求將JSON發佈到Flask視圖返回404

@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) 

瓶頸爲請求記錄404。

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

你有沒有試過PARAMS json.dumps? –

+0

我得到一個奇怪的錯誤「GET/foo?%7B%k%22:%202%7D HTTP/1.1」404 - – Fraz

+0

請參閱我有類似的問題,但我沒有使用request.get_json()。如果你想我可以發佈我所做的事情來完成任務。 –

回答

2
  • 發行一個post請求與JSON數據,而不是一個請求get與查詢參數。該路線還需要允許POST方法。
  • 404是因爲你不會去匹配/foo/<foo>的模式。使用默認路由更改路由以排除<foo>,或轉到正確的URL。
  • 當請求具有正確的mimetype時,您不需要使用force=Trueget_json
  • 您的jsonify調用中的語法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})