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

Oma*_*ali 0 python session flask

我正在为我正在构建的项目构建登录系统。我目前已经有一个注册系统以及一个登录系统,可以登录注册用户。我要做的下一件事是获取用户登录时使用的用户名并将其保存在会话中,以便他们可以访问网站及其功能。

发生的情况是,一旦用户使用正确的凭据登录,我想在会话中保存用户用户名并将它们重定向到 Web 应用程序的主页。

现在我收到如下错误:

Session object does not support item assignment
Run Code Online (Sandbox Code Playgroud)

并且我找不到有关如何解决此问题的任何有效解决方案以下是我的 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'))
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 5

您混淆了“会话”一词的两种完全不同的用法。

您从 sessionmaker 创建并在其中使用的“db session”session.query是(或多或少)与数据库的当前连接。它支持您在 Flask 中进行的所有查询和更新。

它与允许您将特定于用户的数据存储到 cookie 或服务器端存储的“网络会话”无关。这就是您在代码的第二行中从flask 导入的内容,但是它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']
Run Code Online (Sandbox Code Playgroud)