flask TypeError:“ImmutableMultiDict”对象不可调用
Posted
技术标签:
【中文标题】flask TypeError:“ImmutableMultiDict”对象不可调用【英文标题】:flask TypeError: 'ImmutableMultiDict' object is not callable 【发布时间】:2017-04-15 13:16:10 【问题描述】:有人能说出这段代码有什么问题吗?我得到的错误:
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)
这是一个 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>
【问题讨论】:
【参考方案1】:这里有语法错误:
user = User.query.filter_by(Email=request.form(['email'])).first()
应该是:
user = User.query.filter_by(Email=request.form['email']).first()
还有一些其他的例子,所以一定要抓住所有的例子。这是一个错误的原因是您尝试使用字符串列表 ['email']
调用 request.form
而不是索引到表单中。
if (user or password) is None:
也有问题。如果其中一个不是None
,则不会触发该块。但是,我相信理想的行为是同时要求两者。你可以试试这个:
if user is None or password is None:
或:
if None in [user, password]:
【讨论】:
亚当非常感谢你。阅读您的评论后,我才意识到所有错误。再次感谢,非常有帮助以上是关于flask TypeError:“ImmutableMultiDict”对象不可调用的主要内容,如果未能解决你的问题,请参考以下文章
FLASK报错,TypeError,需要valid response
Python Flask,TypeError:'dict'对象不可调用
flask TypeError:“ImmutableMultiDict”对象不可调用
TypeError Ajax Post - Flask Python [重复]