我正在为我正在构建的项目构建登录系统。我目前已经有一个注册系统以及一个登录系统,它将记录一个注册用户。我要做的下一件事是获取用户登录的用户名并将其保存在会话中,以便他们可以访问网站及其功能。
一旦用户使用正确的凭据登录,我想在会话中保存用户用户名并将其重新映射到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'))
答案 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']