2017-02-17 10 views
0

私はシンプルなユーザー・クラス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 

どのように私はそれがコミットされる前、私は塩漬けのバージョンにパスワードを変更することができるように私のUserクラスを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) 
関連する問題