ValueError:View函数未在flask中返回响应

时间:2014-11-10 21:05:14

标签: python flask

所以有几个问题已经被问到,这个错误意味着函数必须返回一个值,或者只是意味着它应该返回一些东西。

我的routes.py文件中已经有了它,但它仍无效。

以下是route.py

的代码
from flask import *
from functools import wraps
app = Flask(__name__)
app.secret_key = "my precious"

@app.route('/')
def home():
     return render_template('home.html')

@app.route('/welcome')
def welcome():
    return render_template('welcome.html')

@app.route('/logout')   
def logout():
    session.pop('logged_in',None)
    return redirect (url_for('home'))

@app.route('/hello')
def hello():
    return render_template('hello.html')


@app.route('/log', methods=['GET','POST'])
def log():
    error = None
    if request.method == "POST":
        if request.form['username'] != 'admin' or  request.form['password'] != 'admin':
            error = "Invalid credentials"
        else: 
            session['logged_in'] = True
            return redirect (url_for('hello'))
        return render_template('log.html', error=error)


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

log.html代码

{% extends "templates.html" %}
{% block content %}
    <h1>Login</h1>
    {% If error %}
        <p class=error> <strong> Error: </strong> {{ error }}
    {% endif %}
    <form action="" method="POST">
        <dl>
            <dt>Username:
            <dt><input type="text" name="username" value="{{
            request.form.username }}">
            <dt>Password:
            <dd><input type="password" name="passowrd"> 
        </dl>
        <p><input type="submit" value="Login">      
    </form>
{% endblock %}

templates.html的代码

<html>
<head>
        <title>Flask tutorial (Part 1)</title>
</head>
    <header>
    <div class="navbar navbar-inverse">
    <div class="navbar-inner">  
        <a class="brand" href="/">Real python (for the web!)</a>
        <ul>
            <li><a href="/welcome">Welcome</a></li>
            <li><a href="/log">login</a></li>
        </ul>
    </div>
    </div>
    </header>
<body>
    <div class="container">
        {% block content %}
        {% endblock %}
    </div>  
</body>
</html>

home.html的代码

{% extends "templates.html"%}
{% block content %}
    <div class="jumbo">
        <h2>Welcome to Flask</h2>
        <br/>
        <p>click <a href="/welcome">here</a> to go to welcome page</p>
    </div>  
{% endblock %}  

hello.html的代码

{% extends "templates.html" %}
{% block content %}
    <h2>Welcome! You are logged in.</h2>
{% endblock %}

welcome.html的代码

{% extends "templates.html"%}
{% block content %}
    <h2>Sample</h2>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
{% endblock %}  

有人可以在我出错的地方帮助我吗? 提前致谢

2 个答案:

答案 0 :(得分:3)

log()方法如果您通过GET访问它,则不会返回回复。 你的问题在错误发生的地方有点无法提供,但这是我可以推断的。

编辑:观看视频,确实是导致您遇到麻烦的log方法。 你不小心缩进太深了。

@app.route('/log', methods=['GET','POST'])
def log():
    error = None
    if request.method == "POST":
        if request.form['username'] != 'admin' or  request.form['password'] != 'admin':
            error = "Invalid credentials"
        else: 
            session['logged_in'] = True
            return redirect (url_for('hello'))
    return render_template('log.html', error=error)

答案 1 :(得分:0)

这个问题已经回答了几次,但我花了一段时间来理解我所寻找的特定于我(略微不同)的问题,所以我只想提出这里的通用答案是:

在您的代码中的某个地方,您正在定义路线但不返回任何内容。此代码返回一个模板:

@app.route('/welcome')
def welcome():
    return render_template("welcome.html")

此代码仅在某些情况下返回模板:

@app.route('/welcome')
def welcome():
    if request.method == "POST":
        return render_template("welcome.html")

因此,如果您真的不确定为什么会看到ValueError: View function did not return a response遍历您的代码并确保所有路由定义(def foo():)实际上return某些内容,以及有些东西没有嵌套在if子句

这个错误并没有提供很多关于陷入困境的线索,这真令人讨厌,但我确信一个更有经验的Pythoner可以解释为什么会这样。