2 html python forms login flask
大家好,有人可以说这段代码有什么问题吗?我得到的错误:TypeError:'ImmutableMultiDict'对象不可调用
def login():
error = None
form = LoginForm(request.form)
if request.method == 'POST':
viewer = User.query.filter_by(Group='viewer').first()
admin = User.query.filter_by(Group='admin').first()
staff = User.query.filter_by(Group='staff').first()
user = User.query.filter_by(Email=request.form(['email'])).first()
password = User.query.filter_by(Password=request.form(['password'])).first()
if (user or password) is None:
session['logged_in'] = False
flash('Please write your username password')
else:
session['logged_in'] = True
flash('You were logged in')
if viewer:
return redirect(url_for('viewer'))
elif admin :
return redirect(url_for('admin'))
elif staff:
return redirect(url_for('employee'))
return render_template('login.html', form=form)
Run Code Online (Sandbox Code Playgroud)
这是一个html部分:
<form class="sa-innate-form" method="post">
{{ form.csrf_token }}
<label>Email Address</label>
<input type="text" name="email" value="{{ request.form.email }}">
<label>Password</label>
<input type="password" name="password" value="{{ request.form.password }}">
<button type="submit" value="submit">Sign In</button>
<a href="">Forgot Password?</a>
</form>
Run Code Online (Sandbox Code Playgroud)
您在这里遇到语法错误:
user = User.query.filter_by(Email=request.form(['email'])).first()
Run Code Online (Sandbox Code Playgroud)
相反,它应该是:
user = User.query.filter_by(Email=request.form['email']).first()
Run Code Online (Sandbox Code Playgroud)
还有其他一些实例,因此请确保您抓住了所有这些实例。这是一个错误的原因是您正在尝试request.form使用字符串列表进行调用,['email']而不是索引到表单中。
if (user or password) is None:也是越野车。如果不是None,则不会触发该块。但是,我认为理想的行为是同时要求两者。您可以尝试以下任一方法:
if user is None or password is None:
Run Code Online (Sandbox Code Playgroud)
要么:
if None in [user, password]:
Run Code Online (Sandbox Code Playgroud)