当前位置: 移动技术网 > IT编程>脚本编程>Python > Python sqlalchemy时间戳及密码管理实现代码详解

Python sqlalchemy时间戳及密码管理实现代码详解

2020年08月02日  | 移动技术网IT编程  | 我要评论

一、时间戳

实际开发中,我们一般希望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来校验密码。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网