2017-02-17 2 views
0

У меня есть простой класс User http://docs.sqlalchemy.org/en/latest/orm/tutorial.htmlSQLAlchemy - как обрабатывать столбец до его фиксации?

Base = declarative_base() 

class User(Base): 
    __tablename__ = 'user' 
    id = Column(Integer, primary_key=True) 
    name = Column(Text) 
    password = Column(Text) # should be a hash 

, как бы я смог moidyf моего класса пользователя или прослушивать события, так что я могу изменить пароль к подсоленной версии, прежде чем он совершил? Вместо того, чтобы делать user.name = salted(username) каждый раз, я хотел бы, чтобы он каким-то образом встроен в класс User.

user = User(name='test', password='hashme') 
Session = sessionmaker(bind=engine) # get a factory 
mySession = Session() 
mySession.add(user) 
mySession.commit() 

ответ

1
Base = declarative_base() 

class User(Base): 
    __tablename__ = 'user' 
    id = Column(Integer, primary_key=True) 
    name = Column(Text) 
    password = Column(Text) # should be a hash 

    @staticmethod 
    def _hash_password(mapper, connection, target): 
     user = target 
     user.password = hash_method(user.password) 


listen(User, 'before_insert', User._hash_password) 
listen(User, 'before_update', User._hash_password) 
Смежные вопросы