• 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来校验密码。

  • 相关阅读:
    爬虫解析库:XPath
    手写一个小型打包构建工具
    Python网络爬虫神器PyQuery的使用方法
    人脸识别JavaScript也可以轻松搞定
    颜值即正义!这几个库颠覆你对数据交互的想象
    微信朋友圈自动点赞
    android studio的安装信息
    Docker使用笔记
    C语言联合
    Mac之Sublime Text使用Go
  • 原文地址:https://www.cnblogs.com/viewts/p/13273470.html
Copyright © 2020-2023  润新知