Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何获取登录用户的名称(Flask、SQLAlchemy)_Python_Python 3.x_Flask_Sqlalchemy_Flask Sqlalchemy - Fatal编程技术网

Python 如何获取登录用户的名称(Flask、SQLAlchemy)

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

我想用身份验证的方式给登录会话的作者命名。 到目前为止,我可以登录用户,但当他已经登录,我找不到方法在网站上使用他的名字

所以我试图创建一种方法,在他登录内存后存储用户名,然后flask将使用这个用户名发布博客文章、评论或编辑个人资料。多谢各位

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登录确实是解决此问题的更好方法。