我正在尝试按照Miguel出色的教程来写这封信(https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-v-user-logins),复制并粘贴所需的文本以尝试消除错误。我已经到达“在模板中显示已登录的用户”部分,但是当我尝试运行该应用程序时,它可以正常运行,但浏览器显示错误,并且CMD会话中有诊断信息(我使用的是Windows)。进一步提供。
我是Python / Flask的新手,但我猜一个被调用的例程没有返回值,但是在阅读完app.py代码后,我真的找不到我犯了什么错误。如果有人能指出正确的方向,我将继续本教程。
routes.py文件具有登录代码:
@app.route('/login', methods=['GET', 'POST'])
def login():
if current_user.is_authenticated:
return redirect(url_for('index'))
form = LoginForm()
if form.validate_on_submit():
user = User.query.filter_by(username=form.username.data).first()
if user is None or not user.check_password(form.password.data):
flash('Invalid username or password')
return redirect(url_for('login'))
login_user(user, remember=form.remember_me.data)
next_page = request.args.get('next')
if not next_page or url_parse(next_page).netloc != '':
next_page = url_for('index')
return redirect(next_page)
是发生问题的..if form.validate_on_submit()..
我希望在127.0.0.1:5000上获得登录屏幕,但浏览器显示:-
内部服务器错误
服务器遇到内部错误,无法完成您的请求。服务器过载或应用程序错误。
被调用的URL是“ http://127.0.0.1:5000/login?next=%2F”
CMD窗口显示以下错误消息:-
[2019-09-07 18:13:47,941]应用程序错误:/ login [GET]异常
追溯(最近一次通话):
wsgi_app中的文件“ c:\ users \ tribl \ venv \ lib \ site-packages \ flask \ app.py”,行2446
响应= self.full_dispatch_request()
1952行中的文件“ c:\ users \ tribl \ venv \ lib \ site-packages \ flask \ app.py”,格式为full_dispatch_request
返回self.finalize_request(rv)
在finalize_request中的文件“ c:\ users \ tribl \ venv \ lib \ site-packages \ flask \ app.py”(1967年)
响应= self.make_response(rv)
在make_response中的文件“ c:\ users \ tribl \ venv \ lib \ site-packages \ flask \ app.py”,行2097
“视图函数未返回有效的响应。”
TypeError:视图函数未返回有效响应。该函数返回None或在没有return语句的情况下结束。
127.0.0.1--[2019年9月7日18:13:47]“ GET / login?next =%2F HTTP / 1.1” 500-
答案 0 :(得分:0)
该错误表明该函数未完成,因为它错过了返回指令。任何视图函数都必须返回某些内容。在您的情况下,您忘记了该行,该行用于指示模板文件在何处,尤其是用于呈现表单。您的代码应如下所示:
@app.route('/login', methods=['GET', 'POST'])
def login():
if current_user.is_authenticated:
return redirect(url_for('index'))
form = LoginForm()
if form.validate_on_submit():
user = User.query.filter_by(username=form.username.data).first()
if user is None or not user.check_password(form.password.data):
flash('Invalid username or password')
return redirect(url_for('login'))
login_user(user, remember=form.remember_me.data)
next_page = request.args.get('next')
if not next_page or url_parse(next_page).netloc != '':
next_page = url_for('index')
return redirect(next_page)
return render_template('login.html', form=form)
将以下行标记为:return render_template('login.html', form=form)