错误将会话集成到我的Flask应用程序中

时间:2017-01-05 10:16:46

标签: python session 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'))

1 个答案:

答案 0 :(得分:2)

你混淆了两个完全不同的词语" session&#34 ;.

" db session"您从sessionmaker创建的,并在session.query中使用(或多或少)当前与数据库的连接。它可以启用您在Flask中进行的所有查询和更新。

它与"网络会话"无关。允许您将用户特定的数据存储到cookie或服务器端存储。这是您在代码的第二行从flask中导入的内容,但是当您调用sessionmaker时,重新定义session会覆盖

你应该称这些不同的东西。理想情况下,您对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']