Python 如何获取登录用户的名称(Flask、SQLAlchemy)
我想用身份验证的方式给登录会话的作者命名。 到目前为止,我可以登录用户,但当他已经登录,我找不到方法在网站上使用他的名字 所以我试图创建一种方法,在他登录内存后存储用户名,然后flask将使用这个用户名发布博客文章、评论或编辑个人资料。多谢各位Python 如何获取登录用户的名称(Flask、SQLAlchemy),python,python-3.x,flask,sqlalchemy,flask-sqlalchemy,Python,Python 3.x,Flask,Sqlalchemy,Flask Sqlalchemy,我想用身份验证的方式给登录会话的作者命名。 到目前为止,我可以登录用户,但当他已经登录,我找不到方法在网站上使用他的名字 所以我试图创建一种方法,在他登录内存后存储用户名,然后flask将使用这个用户名发布博客文章、评论或编辑个人资料。多谢各位 Base = declarative_base() class User(Base): __tablename__ = "users" id = Column(Integer, primary_key=True) use
Base = declarative_base()
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
username = Column(String(64))
password = Column(String(120))
email = Column(String(64))
def __init__(self, username, password, email):
self.username = username
self.password = password
self.email = email
Base.metadata.create_all(engine)
Base2 = declarative_base()
class Blogpost(Base2):
__tablename__ = 'blogpost'
id = Column(Integer, primary_key=True)
title = Column(String(50))
subtitle = Column(String(50))
author = Column(String(20))
date_posted = Column(DateTime)
content = Column(Text)
def __init__(self, title, subtitle, author, date_posted, content):
self.title = title
self.subtitle = subtitle
self.author = author
self.date_posted = date_posted
self.content = content
@app.route('/login', methods=['POST'])
def login():
POST_USERNAME = str(request.form['username'])
POST_PASSWORD = str(request.form['password'])
def check_password(hashed_password, user_password):
password, salt = hashed_password.split(':')
return password == hashlib.sha256(salt.encode() + user_password.encode()).hexdigest()
Session = sessionmaker(bind=engine)
s = Session()
user = s.query(User).filter_by(username=POST_USERNAME).first()
if check_password(user.password, POST_PASSWORD) == True:
session['logged_in'] = True
user_name = POST_USERNAME
else:
flash('wrong password!')
return index()
@app.route('/add')
def add():
return render_template('add.html')
@app.route('/addpost', methods=['POST'])
def addpost():
title = request.form['title']
subtitle = request.form['subtitle']
content = request.form['content']
Session = sessionmaker(bind=engine)
session = Session()
post = Blogpost(title=title, subtitle=subtitle, author=user_name, content=content, date_posted=datetime.now())
session.add(post)
session.commit()
我鼓励您使用诸如flask登录之类的扩展进行用户管理,或者使用flask安全性进行扩展功能,同时,您可以将用户存储在flask会话中 第一个导入会话我将称之为login_会话,以区别于您的sql alchemy会话
from flask import session as login_session
一旦用户登录,您就可以像这样存储用户详细信息
login_session['username'] = user.username #user here being the user object you have queried
del login_session['username']
和从会话访问用户名
username = login_session['username']
一旦用户注销,您将从会话中删除用户详细信息,如下所示
login_session['username'] = user.username #user here being the user object you have queried
del login_session['username']
<> P>但是正如其他人在评论中提到的,对于一个严肃的Web应用程序,你会想考虑使用一个烧瓶扩展名用于用户管理< /P> SeScMeMand和引擎来自哪里?要完成您想要做的事情,通常应该使用flask.session,但如果您问我,这些看起来像SQLAlchemy对象。为什么不使用flask的扩展来处理用户会话管理,像Flask登录?我认为def check_密码的缩进格式不正确-请修复它。带有返回索引的行-不应该在某些路由函数中吗?谢谢大家,Flask登录是解决此问题的更好方法。谢谢,Flask登录确实是解决此问题的更好方法。