2017-03-04 88 views
-1

這是我的瓶代碼:的Python瓶ValueError異常:查看功能並沒有返回響應

from flask import Flask 
from flask import request 

app = Flask(__name__) 

@app.route('/', methods=['GET', 'POST']) 
def signal(): 
    if request.method == 'POST': 
     content = request.get_json() 
     return content 
    else: 
     return 'Hello, world!' 

if __name__ == '__main__': 
    app.run(debug=True) 

我運行這個HTTP後(從同一臺機器):

import requests 
import json 
dump= '{"on":"true"}' 
r = requests.post('http://127.0.0.1:5000', dump) 

而且收到此錯誤:

[2017-03-04 14:18:35,250] ERROR in app: Exception on/[POST] 
Traceback (most recent call last): 
File "c:\users\andrew\appdata\local\programs\python\python35-32\lib\site-packages\flask\app.py", line 1982, in wsgi_app 
response = self.full_dispatch_request() 
File "c:\users\andrew\appdata\local\programs\python\python35-32\lib\site-packages\flask\app.py", line 1615, in full_dispatch_request 
return self.finalize_request(rv) 
File "c:\users\andrew\appdata\local\programs\python\python35-32\lib\site-packages\flask\app.py", line 1630, in finalize_request 
response = self.make_response(rv) 
File "c:\users\andrew\appdata\local\programs\python\python35-32\lib\site-packages\flask\app.py", line 1725, in make_response 
raise ValueError('View function did not return a response') 
ValueError: View function did not return a response 

任何想法,爲什麼發生這種情況?從一開始我就在網上閱讀,我認爲這是因爲我沒有其他的東西,因爲它是一個GET,但我現在無法理解。

+1

縮進是錯誤的,還是僅僅來自複製/粘貼? – Vallentin

+0

這可能是複製粘貼,但你究竟意味着什麼?在IF下? –

回答

1

如果您正在測試直接返回您的POST請求的有效載荷,你應該做的jsonify和瓶有這個UTIL功能

from flask import Flask 
from flask import request, jsonify 

app = Flask(__name__) 

@app.route('/', methods=['GET', 'POST']) 
def signal(): 
    if request.method == 'POST': 
     content = request.get_json() 
     return jsonify(content) 
    else: 
     return 'Hello, world!' 

if __name__ == '__main__': 
    app.run(debug=True) 

然後在你的測試代碼,添加Content-Type爲標題,(不這樣做,request.get_json()韓元」 t工作):

dump = '{"on":"true"}' 
r = requests.post('http://127.0.0.1:5000', data=dump, 
        headers={'Content-Type': 'application/json'}) 
+0

雖然這不會引發錯誤。 – Vallentin

+0

@Vallentin它會的,因爲如果沒有有效載荷,'content'是'NoneType',Flask不允許'NoneType'作爲返回值。 – duan

+0

這是真的。但考慮到測試的條件,那麼'content'不應該是'NoneType'。 – Vallentin

0

看起來像問題是與您的腳本是向您的應用程序提出請求問題。試着用捲曲,像下面:

$ curl -H "Content-type: application/json" -X POST http://127.0.0.1:5000 -d '{"on":"true"}' 

你會得到迴應如下:

{ 
    "on": "true" 
} 

你的代碼(添加jsonify)看起來應該如下:

from flask import Flask 
from flask import request,jsonify 

app = Flask(__name__) 

@app.route('/', methods=['GET', 'POST']) 
def signal(): 
    if request.method == 'POST': 
     content = request.json 
     return jsonify(content) 
    else: 
     return 'Hello, world!' 

if __name__ == '__main__': 
    app.run(debug=True) 
+0

如果響應顯示在我的終端? –

+0

是的!你正在使用兩個終端。一個用於燒瓶應用程序,另一個用於運行curl命令。 Curl會響應你的JSON對象。 – Sopan