Flask登录未注册用户给出500错误



我正试图按照github上的代码示例制作一个简单的Flask登录服务器。它非常适合程序中的用户,但如果输入了不正确的用户名,就会出现500内部服务器错误。任何建议都会很棒:(

@app.route('/login', methods=['GET', 'POST'])
def login():
if flask.request.method == 'GET':
return '''
<form action='login' method='POST'>
<input type='text' name='email' id='username' placeholder='email'/>
<input type='password' name='password' id='password' placeholder='password'/>
<input type='submit' name='submit'/>
</form>
'''
#return render_template('logins.html')
# if request.method == 'POST':
# username = request.form['username']
# password = request.form['password']
email = flask.request.form['email']
if flask.request.form['password'] == users[email]['password']:
user = User()
user.id = email
flask_login.login_user(user)
return flask.redirect(flask.url_for('protected'))
return 'Bad login'

Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 2446, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1951, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1820, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python3.5/dist-packages/flask/_compat.py", line 39, in reraise
raise value
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1949, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1935, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "serv.py", line 65, in login
if flask.request.form['password'] == users[email]['password']:
KeyError: 's'

请编辑您的问题以添加错误追溯和代码以确保完整性。

我可以根据你提到的行为进行粗略的推测。您应该有user_loader回调函数,在使用login_user(user)之前使用该函数获取用户。根据您的实现,此功能可能是从数据库或内存中的字典或列表加载用户

很可能您没有异常处理,以防实例的用户不存在。如果您从字典加载,您的代码应该如下所示。

@login_manager.user_loader
def load_user(userid):
try:
user = users[userid]
return user
except KeyError:
return None

上面的代码处理异常,并在用户不存在的情况下返回None。这就是为什么flask-login将能够决定不让您的用户登录,而您的程序不会返回错误。

最新更新