2017-01-05 5 views
-1

私が構築しているプロジェクトのログインシステムを構築しています。私は現在、登録システムと登録ユーザーを記録するログインシステムを既に持っています。私がやろうとしている次のことは、ユーザがログインしたユーザのユーザ名を取得し、セッションに保存してWebサイトとその機能にアクセスできるようにすることです。エラーFlaskアプリケーションへのセッションの統合

ユーザーが正しい資格情報でログインすると、ユーザーのユーザー名をセッションに保存し、Webアプリケーションのメインページに再割り当てします。次のように

は今、私はエラーを取得しています:

Session object does not support item assignment 

を、私は以下 は私のpythonファイルを持っているすべてのコードである。この問題を解決する方法上の任意の実用的なソリューションを見つけることができませんこのエラーに関連する:

コードを読む前に。私には秘密鍵が含まれていますが、私はここにそれを載せるつもりはありません。 以下のルートの下に向かってセッション行がなければ、ログインは正常に動作します。

from flask import Flask, render_template, request, redirect, url_for, flash 
from flask import escape, session 
from datetime import datetime 
from sqlalchemy import create_engine 
from sqlalchemy.orm import sessionmaker 

DBSession = sessionmaker(bind = engine) 
session = DBSession() 

@app.route('/login', methods=['get', 'POST']) 
def LogIn(): 
    if request.method == 'POST': 
     username = request.form['username'] 
     password = request.form['password'] 
     user = session.query(Users).filter_by(Username = username).first() 
     if user == None: 
      flash('The Username does not match any records') 
      return render_template('Login.html') 
     elif password != user.Password: 
      flash('The username/password does not match any record') 
      return render_template('Login.html') 
     else: 
      flash('Successfully Loged In') 
      session['username'] = request.form['username'] 
      return redirect(url_for('HomePage')) 
+0

コードのどの行にそのエラーMSGが生成されます。理想的にはsessionmakerへのお電話は、あなたがして、ユーザーにあなたのクエリで使用db_sessionのようなもの、に割り当てる必要がありますか?最後の行から –

+0

秒。私は間違いをしていません。一度私はエラーを得るその行を追加 –

答えて

2

"セッション"という言葉の全く異なる2つの使い方を混乱させています。

sessionmakerから作成し、session.queryで使用する「dbセッション」は、データベースへの現在の接続です(多かれ少なかれ)。これはFlaskで行ったすべてのクエリと更新を可能にするものです。

これは、ユーザー固有のデータをCookieまたはサーバーサイドストアに格納できる「Webセッション」とは関係ありません。これはコードの2行目のフラスコからインポートしたものですが、sessionの再定義によってを上書きしています。これはsessionmakerを呼び出すときです。

これらの異なるものを呼び出す必要があります。

db_session = DBSession() 
... 
# use the db session here 
user = db_session.query(Users).filter_by(Username = username).first() 
... 
# use the user session here 
session['username'] = request.form['username'] 
+0

それは働いた。別の小さなもの。現在のセッションを見るための方法はありますか?プロジェクトの開発のためにセッションに保存されているものはありますか? –

+0

デフォルトでは、データは署名付きのクッキーに保存されているので、ブラウザの開発ツールを使用してクッキーを調べることができます。 –

関連する問題