2017-01-21 6 views
0

編集:これは重複した質問ではありません。私はコードに何が間違っているのか尋ねていません。私は非常に明確に私はそれがエラーを投げていることを知っているので、ビューはreturn何かをする必要があります。私はチュートリアルでエラーをスローし、そのエラーのためにユーザーを準備したり、レッスンを教えるためにそのエラーを使用したりしないコードを提供する理由を尋ねています。答えは、チュートリアルは完璧ではないということです。ValueError:View関数はFlaskを使用してPythonで応答を返しませんでした

オリジナルの投稿:Flaskクイックスタートチュートリアルhttp://flask.pocoo.org/docs/0.12/quickstart/に従っています。私はURLビルディングをしているとき、私はページの約2/5をダウンしています。以下のコードはチュートリアルのものですが、localhost:5000 /にアクセスしようとすると、ValueErrorという題名が投げられます。私はビューがreturn何かでなければならないことを知っています。それがエラーを投げかけている理由です。

私の主な質問は、チュートリアルで何か不足していますか?チュートリアルでは、そのエラーで何かを教えていない限りエラーにはならないが、エラーが発生するとは言いません。むしろ、以下のコードで動作するはずです。基本的なことを忘れてしまった場合は、チュートリアルを進めたくありません。

from flask import Flask, url_for 
app = Flask(__name__) 
@app.route('/') 
def index(): pass 

@app.route('/login') 
def login(): pass 

@app.route('/user/<username>') 
def profile(username): pass 

with app.test_request_context(): 
    print url_for('index') 
    print url_for('login') 
    print url_for('login', next='/') 
    print url_for('profile', username='John Doe') 
+1

チュートリアルの特定のセクションでは、URLを作成する方法を説明しています。あなたが物事を返す場合は、はい、あなたは物事を返す必要があります。 – davidism

+0

@davidism、上記の私の質問に編集を参照してください。ビューが何かを返さなければならないので、私はそれがエラーを投げていることを知っていると私は非常に明確に言った。私はチュートリアルでエラーをスローし、そのエラーのためにユーザーを準備したり、レッスンを教えるためにそのエラーを使用したりしないコードを提供する理由を尋ねています。私は私の主要な質問を大胆にしました。したがって、私の質問は重複していません。 「重複としてマークされました」を削除しますか? –

答えて

1

あなたはそれがPythonシェルとドキュメント上で見ることができるように述べている:

test_request_context(): It tells Flask to behave as though it is handling a request, even though we are interacting with it through a Python shell.

チュートリアルでは、ファイルにこのコードを書くと言っていません。

#test.py 
from flask import Flask, url_for 
app = Flask(__name__) 
@app.route('/') 
def index(): pass 
... 
if __name__ == '__main__': 
    app.run() 
$ python test.py 
/
/login 
/login?next=%2F 
/user/John%20Doe 

ブラウザでlocalhost:5000を押すと、エラーが表示されます。表示機能が応答を返しませんでした。

私の主な質問は、チュートリアルで何か不足していますか?はい、おそらくあなたはそれがpythonシェル上に表示されている行方不明です。

1

Flaskのview関数は常にResponseオブジェクトを返す必要があります。そうでなければView function did not return a responseエラーが発生します。この例のコードはリペナンスのためだけに用意されていて、箱から出てきたものではないようです。

回答の詳細については、http://flask.pocoo.org/docs/0.12/quickstart/#about-responsesを参照してください。

1

localhost:5000にアクセスすると、appが実行されていないため、エラーが発生します。そして、あなたは正しいです、それはまた何かを返すべきです。

このブロックの目的:

with app.test_request_context(): 
    print url_for('index') 
    print url_for('login') 
    print url_for('login', next='/') 
    print url_for('profile', username='John Doe') 

は次のようになりurl_forによって生成されたURL何を示すことだけです。

python your_file.pyでファイルを実行し、シェルの出力を確認することができます。

関連する問題