【问题标题】:flask TypeError: 'ImmutableMultiDict' object is not callableflask TypeError:“ImmutableMultiDict”对象不可调用
【发布时间】: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>

【问题讨论】:

    标签: python html forms authentication flask


    【解决方案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]:
    

    【讨论】:

    • 亚当非常感谢你。阅读您的评论后,我才意识到所有错误。再次感谢,非常有帮助
    猜你喜欢
    • 2016-03-07
    • 1970-01-01
    • 2013-08-06
    • 2017-09-13
    • 2014-02-19
    • 2021-05-01
    相关资源
    最近更新 更多