ValueError:View函数没有使用Flask在Python中返回响应

时间:2017-01-21 16:51:01

标签: python flask

编辑:这不是一个重复的问题。我不是在问这个代码有什么问题。我非常清楚地说我知道它会引发错误,因为视图必须return。我问为什么教程会提供会抛出错误的代码,然后既没有为用户准备该错误,也没有使用该错误来教授课程。答案是,教程并不完美。

原帖:我正在http://flask.pocoo.org/docs/0.12/quickstart/关注Flask快速入门教程。当我建立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')

3 个答案:

答案 0 :(得分:1)

你可以看到它在python shell上,docs说:

  

test_request_context():它告诉Flask表现得像处理请求一样,即使我们通过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 shell上。

答案 1 :(得分:1)

Flask中的视图函数应始终返回Response对象,否则会发生View function did not return a response错误。似乎示例中的代码仅仅是为了引用而不是开箱即用。

有关回复的详情,请参阅http://flask.pocoo.org/docs/0.12/quickstart/#about-responses

答案 2 :(得分: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生成的网址。

因此,您可以使用python your_file.py运行文件并查看shell中的输出。