zoukankan      html  css  js  c++  java
  • Python sqlalchemy 时间戳和密码管理

    一、时间戳

    实际开发中,我们一般希望create_time和update_time这两个属性能自动设置,所以在建表的时候需要在model上特殊处理一下:

    from sqlalchemy.sql import func
    
    class User(db.Model):
        __tablename__ = 'user'
        id = db.Column(db.Integer, primary_key = True)
        email = db.Column(db.String(128))
        password_hash = db.Column(db.String(128))
        create_time = db.Column(db.DateTime, server_default = func.now())
        update_time = db.Column(db.DateTime, server_default = func.now(), onupdate = func.now())

    关于datetime转时间戳的方法,例如‘2020-07-09 14:15:31’(从数据库读取一般为字符串),首先需要将它转换成timetuple:

    import time
    timetuple = time.strptime('2020-07-09 14:15:31', '%Y-%m-%d %H:%M:%S')

    如果你拿到的是datetime对象,那么更简单:

    now = datetime.datetime.now()
    timetuple = now.timetuple()

    然后将timetuple转化为时间戳:

    timestamp = int(time.mktime(timetuple))

    那么,时间戳又要如何转回datetime呢?方法如下:

    last_time = datetime.datetime.fromtimestamp(timestamp)

    二、密码管理

    在数据库中一般不要明文存储密码,可以用散列值替换,修改model:

    from sqlalchemy.sql import func
    from werkzeug.security import generate_password_hash, check_password_hash
    
    class User(db.Model):
        __tablename__ = 'user'
        id = db.Column(db.Integer, primary_key = True)
        email = db.Column(db.String(128))
        password_hash = db.Column(db.String(128))
        create_time = db.Column(db.DateTime, server_default = func.now())
        update_time = db.Column(db.DateTime, server_default = func.now(), onupdate = func.now())
    
        @property
        def password(self):
            raise AttributeError('password is not a readable attribute')
    
        @password.setter
        def password(self, password):
            self.password_hash = generate_password_hash(password)
        
        def verify_password(self, password):
            return check_password_hash(self.password_hash, password)

    将password设置成只写,使用verify_password来校验密码。

  • 相关阅读:
    HDU 6194【后缀数组】
    SGU 104 Little shop of flowers【DP】
    POJ 2104 K-th Number【整体二分 + 树状数组】
    HDU 5573 Binary Tree【构造】
    UVA 10245 The Closest Pair Problem【分治】
    POJ 1741 Tree【树分治】
    边缘检测的微分算子简单比较【1】
    HDU 5584 LCM Walk【搜索】
    51nod 1686 第K大区间【离散化+二分】
    HDU 5572 An Easy Physics Problem【计算几何】
  • 原文地址:https://www.cnblogs.com/viewts/p/13273470.html
Copyright © 2011-2022 走看看