2017-01-05 3 views
-1

Я создаю систему входа для проекта, который я создаю. У меня уже есть система регистрации, а также система входа в систему, которая будет регистрировать зарегистрированного пользователя. Следующее, что я пытаюсь сделать, это получить имя пользователя пользователя, с которым он вошел, и сохранить его в сеансе, чтобы они могли получить доступ к веб-сайту и его функциям.Ошибка Интеграция сессий в мое приложение Flask

Что происходит, когда пользователь вошел в систему с правильными учетными данными, я хочу сохранить имя пользователя пользователя в сеансе и переадресовать его на главную страницу веб-приложения.

Теперь я получаю ошибку следующим образом:

Session object does not support item assignment 

, и я не могу найти рабочее решение о том, как решить эту проблему Ниже весь код, который у меня есть в моем файле питона, который релевантные этой ошибке:

Перед чтением кода. У меня есть секретный ключ, но я не собираюсь публиковать его здесь. Вход в систему корректно работает без строки сеанса в нижней части маршрута ниже.

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

На какой строке кода является то, что сообщ ошибка генерируется? –

+0

секунд из последний линия. без строки я не получаю ошибку. Как только я добавлю эту строку, я получу ошибку. –

ответ

2

Вы вводите в заблуждение два совершенно разных использования слова «сессия».

«db session», который вы создаете из Sessionmaker, и использовать в session.query (более или менее) для текущего подключения к базе данных. Это то, что разрешает все запросы и обновления, которые вы делаете в Flask.

Это не имеет никакого отношения к «веб-сессии», которая позволяет хранить данные, специфичные для пользователя, в хранилище cookie или на стороне сервера. Это то, что вы импортируете из фляги во второй строке своего кода, но это перезаписано путем переопределения session при вызове sessionmaker.

Вы должны называть эти разные вещи. В идеале ваш призыв к sessionmaker должны быть назначены на что-то вроде db_session, которые вы затем использовать в запросе для пользователя:

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

Поскольку по умолчанию данные хранятся в подписанном файле cookie, вы можете проверить cookie с помощью инструментов dev вашего браузера. –

Смежные вопросы