【问题标题】:Error Integrating sessions into my Flask app将会话集成到我的 Flask 应用程序时出错
【发布时间】:2017-01-05 18:29:37
【问题描述】:

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

一旦用户使用正确的凭据登录,我想将用户名保存在会话中并将他们重定向到 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'))

【问题讨论】:

  • 错误信息是在哪一行代码生成的?
  • 倒数第二行。没有这条线,我不会出错。一旦我添加该行,我就会收到错误

标签: python session flask


【解决方案1】:

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

您从 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']

【讨论】:

  • 成功了。另一件小事。有没有办法让我看到当前会话以及会话中存储的内容以开发我的项目
  • 由于默认情况下数据存储在签名 cookie 中,您可以使用浏览器的开发工具检查 cookie。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-04
  • 1970-01-01
  • 2010-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多