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


Posted in Python onAugust 01, 2020

一、时间戳

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现选择排序
Jun 04 Python
Python简单基础小程序的实例代码
Apr 28 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
Jun 14 Python
python实现最大优先队列
Aug 29 Python
python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法
Oct 04 Python
用python求一重积分和二重积分的例子
Dec 06 Python
flask 实现上传图片并缩放作为头像的例子
Jan 09 Python
Python3 字典dictionary入门基础附实例
Feb 10 Python
Python如何实现在字符串里嵌入双引号或者单引号
Mar 02 Python
Python HTMLTestRunner如何下载生成报告
Sep 04 Python
matplotlib制作雷达图报错ValueError的实现
Jan 05 Python
python神经网络 tf.name_scope 和 tf.variable_scope 的区别
May 04 Python
Python如何读写二进制数组数据
Aug 01 #Python
Python将字典转换为XML的方法
Aug 01 #Python
Python Flask异步发送邮件实现方法解析
Aug 01 #Python
Python实现弹球小游戏
Aug 01 #Python
序列化Python对象的方法
Aug 01 #Python
Python 忽略文件名编码的方法
Aug 01 #Python
Python 如何展开嵌套的序列
Aug 01 #Python
You might like
php批量更改数据库表前缀实现方法
2013/10/26 PHP
PHP中多维数组的foreach遍历示例
2014/06/13 PHP
基于CakePHP实现的简单博客系统实例
2015/06/28 PHP
PHP设计模式之装饰器模式实例详解
2018/02/07 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
2019/08/27 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
2020/08/20 PHP
JQuery打造PHP的AJAX表单提交实例
2009/11/03 Javascript
Javascript 面向对象 继承
2010/05/13 Javascript
jQuery版仿Path菜单效果
2011/12/15 Javascript
jquery命令汇总,方便使用jquery的朋友
2012/06/26 Javascript
extjs 04_grid 单击事件新发现
2012/11/27 Javascript
jquery动态改变onclick属性导致失效的问题解决方法
2013/12/04 Javascript
javascript定义变量时带var与不带var的区别分析
2015/01/12 Javascript
jquery+CSS3实现淘宝移动网页菜单效果
2015/08/31 Javascript
Node.js中用D3.js的方法示例
2017/01/16 Javascript
JavaScript实现定时页面跳转功能示例
2017/02/14 Javascript
重新理解JavaScript的六种继承方式
2017/03/24 Javascript
Node.js中多进程模块Cluster的介绍与使用
2017/05/27 Javascript
js判断非127开头的IP地址的实例代码
2020/01/05 Javascript
electron踩坑之dialog中的callback解决
2020/10/06 Javascript
python从入门到精通(DAY 1)
2015/12/20 Python
pandas DataFrame实现几列数据合并成为新的一列方法
2018/06/08 Python
用Python shell简化开发
2018/08/08 Python
PyTorch 随机数生成占用 CPU 过高的解决方法
2020/01/13 Python
python脚本定时发送邮件
2020/12/22 Python
使用CSS3的font-face字体嵌入样式的方法讲解
2016/05/13 HTML / CSS
html5组织内容_动力节点Java学院整理
2017/07/10 HTML / CSS
HTML5中使用json对象的实例代码
2018/09/10 HTML / CSS
Styleonme中文网:韩国高档人气品牌
2017/06/21 全球购物
学生实习自我鉴定
2013/10/11 职场文书
药学专业个人的自我评价
2013/12/31 职场文书
中考学习决心书
2015/02/04 职场文书
2015年扫黄打非工作总结
2015/05/13 职场文书
《和时间赛跑》读后感3篇
2019/12/16 职场文书
MySQL为id选择合适的数据类型
2021/06/07 MySQL
Nginx缓存设置案例详解
2021/09/15 Servers