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内置函数OCT详解
Nov 09 Python
使用Eclipse如何开发python脚本
Apr 11 Python
python复制文件到指定目录的实例
Apr 27 Python
Python中实现变量赋值传递时的引用和拷贝方法
Apr 29 Python
pycharm 主题theme设置调整仿sublime的方法
May 23 Python
详解Python if-elif-else知识点
Jun 11 Python
Django集成CAS单点登录的方法示例
Jun 10 Python
PyTorch之图像和Tensor填充的实例
Aug 18 Python
Python实现计算图像RGB均值方式
Jun 04 Python
keras实现调用自己训练的模型,并去掉全连接层
Jun 09 Python
使用Keras构造简单的CNN网络实例
Jun 29 Python
python爬虫中抓取指数的实例讲解
Dec 01 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&&mysql)一
2006/10/09 PHP
phpmyadmin中禁止外网使用的方法
2014/11/04 PHP
学习php设计模式 php实现单例模式(singleton)
2015/12/07 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
2019/08/27 PHP
laravel实现上传图片并在页面显示的例子
2019/10/14 PHP
laravel框架之数据库查出来的对象实现转化为数组
2019/10/23 PHP
js兼容标准的表格变色效果
2008/06/28 Javascript
Div自动滚动到末尾的代码
2008/10/26 Javascript
基于jQuery的让非HTML5浏览器支持placeholder属性的代码
2011/05/24 Javascript
js中eval详解
2012/03/30 Javascript
javascript中clone对象详解
2014/12/03 Javascript
学习Bootstrap滚动监听 附调用方法
2016/07/02 Javascript
Three.js学习之文字形状及自定义形状
2016/08/01 Javascript
jquery实现全选、不选、反选的两种方法
2016/09/06 Javascript
利用C/C++编写node.js原生模块的方法教程
2017/07/07 Javascript
微信小程序实现页面浮动导航
2019/01/28 Javascript
vue-cli3 项目优化之通过 node 自动生成组件模板 generate View、Component
2019/04/30 Javascript
Element-ui el-tree新增和删除节点后如何刷新tree的实例
2020/08/31 Javascript
[49:56]VG vs Optic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python字符串处理实例详解
2017/05/18 Python
Python实现中文数字转换为阿拉伯数字的方法示例
2017/05/26 Python
解决使用PyCharm时无法启动控制台的问题
2019/01/19 Python
python属于跨平台语言码
2020/06/09 Python
Python 整行读取文本方法并去掉readlines换行\n操作
2020/09/03 Python
美国中小型企业领先的办公家具供应商:Office Designs
2016/11/26 全球购物
欧舒丹加拿大官网:L’Occitane加拿大
2017/10/29 全球购物
英国时尚运动品牌的合集:The Sports Edit
2017/12/20 全球购物
英国领先的露营和露营车品牌之一:OLPRO
2019/08/06 全球购物
大学生毕业的自我评价分享
2014/01/02 职场文书
竞争上岗演讲稿范文
2014/05/12 职场文书
李培根演讲稿
2014/05/22 职场文书
领导班子四风表现材料
2014/08/23 职场文书
个人专业技术总结
2015/03/05 职场文书
物业客服专员岗位职责
2015/04/07 职场文书
孩子满月酒答谢词
2015/09/30 职场文书
学生会宣传部竞选稿
2015/11/21 职场文书