2017-01-05 5 views
-1

Ich erstelle ein Anmeldesystem für ein Projekt, das ich erstelle. Ich habe derzeit bereits ein Registrierungssystem sowie ein Login-System, das einen registrierten Benutzer protokolliert. Die nächste Sache, die ich versuche, ist, den Benutzernamen zu erhalten, mit dem er sich angemeldet hat, und ihn in der Sitzung zu speichern, damit er auf die Website und ihre Funktionen zugreifen kann.Fehler bei der Integration von Sitzungen in meine Flask-App

Sobald der Benutzer sich mit den richtigen Anmeldeinformationen angemeldet hat, möchte ich den Benutzernamen des Benutzers in der Sitzung speichern und sie auf der Hauptseite der Webanwendung wiederherstellen.

Jetzt bekomme ich den Fehler wie folgt:

Session object does not support item assignment 

und ich kann keine funktionierende Lösung, wie finden, dieses Problem zu beheben Im Folgenden wird der gesamte Code, den ich in meinem Python-Datei, die ist Relevant für diesen Fehler:

Bevor Sie den Code lesen. Ich habe einen geheimen Schlüssel, aber ich werde ihn hier nicht posten. Die Anmeldung funktioniert ordnungsgemäß ohne die Sitzungszeile in Richtung der unteren Zeile der Route.

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

Auf Welche Codezeile wird, dass Fehler msg erzeugt? –

+0

Sekunde von der letzten Zeile. Ohne die Linie bekomme ich keinen Fehler. Sobald ich diese Zeile hinzufügen, erhalte ich den Fehler –

Antwort

2

Sie verwechseln zwei völlig unterschiedliche Verwendungen des Wortes "Sitzung".

Die "db session", die Sie aus Sessionmaker erstellen und in session.query verwenden, ist (mehr oder weniger) die aktuelle Verbindung zur Datenbank. Es aktiviert alle Abfragen und Aktualisierungen, die Sie in Flask vornehmen.

Es hat nichts mit der "Web-Sitzung" zu tun, die es ermöglicht, benutzerspezifische Daten in einem Cookie oder serverseitigen Speicher zu speichern. Das ist, was Sie aus Flasche in der zweiten Zeile Ihres Codes importieren, aber es ist überschrieben durch die Neudefinition von session, wenn Sie Sessionmaker aufrufen.

Sie sollten diese verschiedenen Dinge nennen. Im Idealfall sollte auf Ihren Anruf sessionmaker wie db_session etwas zugeordnet werden, die Sie dann in Ihrer Abfrage Benutzer verwenden:

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

Es funktionierte. eine andere kleine Sache. Gibt es eine Möglichkeit, die aktuelle Sitzung und was in der Sitzung für die Entwicklung meines Projekts gespeichert ist zu sehen –

+0

Da die Daten standardmäßig in einem signierten Cookie gespeichert sind, können Sie das Cookie mit den Dev Tools Ihres Browsers untersuchen. –

Verwandte Themen