2016-12-01 21 views
0

こんにちは皆、誰かがこのコードに間違っていると言うことができますか?私が取得エラー: はTypeError: 'ImmutableMultiDict' オブジェクトがフラスコ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> 

答えて

2

あなたがここに構文エラーがあります。

user = User.query.filter_by(Email=request.form(['email'])).first() 

代わりに:

user = User.query.filter_by(Email=request.form['email']).first() 

これにはいくつかの例がありますので、すべてをキャッチしてください。これがエラーである理由は、request.formを文字列リスト['email']でフォームに索引付けするのではなく呼び出すためです。

if (user or password) is None:もバグです。いずれかがNoneでない場合、ブロックはトリガーされません。しかし、私は、望ましい行動は両方を必要とすると信じています。

if user is None or password is None: 

か:あなたはこのどちらか試みることができる

if None in [user, password]: 
+0

アダムをありがとうございました。私はちょうどあなたのコメントを読んだ後すべてのエラーを認識した。再びありがとう、それは非常に有用だった –

関連する問題