2017-03-04 14 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

あなたが直接あなたのポストの要求ペイロードを返すテストしている場合は、このなし(、あなたが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.get_json() 
     return jsonify(content) 
    else: 
     return 'Hello, world!' 

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

このutilの機能を持っている、ヘッダに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

はい! 2つの端末を使用しています。 1つはフラスコのアプリケーションに、もう1つはcurlコマンドを実行します。 CurlがJSONオブジェクトに応答します。 – Sopan

関連する問題