Как получить имя зарегистрированного пользователя (Flask, SQLAlchemy) - PullRequest
0 голосов
/ 02 мая 2018

Я хочу автоматически указать имя авторам, вошедшим в систему из авторизованного сеанса. Пока я могу войти в систему пользователя, но когда он уже зарегистрирован, я не могу найти способ работать с его именем на сайте.

Итак, я пытаюсь создать какой-нибудь способ, который будет хранить имя пользователя после того, как он войдет в память, а колба будет использовать это имя пользователя для сообщений в блогах и комментариев или для редактирования профиля. Спасибо

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() 

1 Ответ

0 голосов
/ 02 мая 2018

Я бы посоветовал вам использовать расширение, такое как flask-login для управления пользователями или flask-security для расширенных функций, тем временем вы можете хранить пользователя в сеансах фляги.

первый сеанс импорта (я назову это login_session, чтобы отличить его от вашего сеанса sql-alchemy)

from flask import session as login_session

Затем, как только пользователь войдет в систему, вы можете сохранить информацию о пользователе, как это

login_session['username'] = user.username #user here being the user object you have queried

И для доступа к имени пользователя из сеанса

username  = login_session['username']

и когда пользователь выходит из системы, вы удаляете информацию о пользователе из сеанса, как это

del login_session['username']

Но, как другие упоминали в комментариях, для серьезного веб-приложения вы можете рассмотреть возможность использования одного из расширений фляги для управления пользователями

...