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正则表达式操作指南(re使用)
Sep 06 Python
深入剖析Python的爬虫框架Scrapy的结构与运作流程
Jan 20 Python
python爬取各类文档方法归类汇总
Mar 22 Python
python与C、C++混编的四种方式(小结)
Jul 15 Python
使用OpenCV实现仿射变换—平移功能
Aug 29 Python
python/Matplotlib绘制复变函数图像教程
Nov 21 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
Mar 06 Python
解决Django中checkbox复选框的传值问题
Mar 31 Python
Scrapy项目实战之爬取某社区用户详情
Sep 17 Python
如何在python中处理配置文件代码实例
Sep 27 Python
Python多线程实用方法以及共享变量资源竞争问题
Apr 12 Python
PYTHON 使用 Pandas 删除某列指定值所在的行
Apr 28 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
PHP5.3.1 不再支持ISAPI
2010/01/08 PHP
调整优化您的LAMP应用程序的5种简单方法
2011/06/26 PHP
PHP和Shell实现检查SAMBA与NFS Server是否存在
2015/01/07 PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
2016/11/07 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
2017/09/27 PHP
一个很酷的拖动层的js类,兼容IE及Firefox
2009/06/23 Javascript
jQuery创建平滑的页面滚动(顶部或底部)
2013/02/26 Javascript
鼠标滚轮控制网页横向移动实现思路
2013/03/22 Javascript
JavaScript将数据转换成整数的方法
2014/01/04 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
2014/04/10 Javascript
jquery Ajax 全局调用封装实例详解
2017/01/16 Javascript
Vue之Watcher源码解析(2)
2017/07/19 Javascript
jQuery实现点击下拉框中的值累加到文本框中的方法示例
2017/10/28 jQuery
解决VUEX兼容IE上的报错问题
2018/03/01 Javascript
angular的输入和输出的使用方法
2018/09/22 Javascript
微信小程序 wepy框架与iview-weapp的用法详解
2019/04/10 Javascript
javascript将扁平的数据转为树形结构的高效率算法
2020/02/27 Javascript
jQuery 选择器用法实例分析【prev + next】
2020/05/22 jQuery
taro 实现购物车逻辑的实例代码
2020/06/05 Javascript
Vue-router编程式导航的两种实现代码
2021/03/04 Vue.js
linux下安装easy_install的方法
2013/02/10 Python
用实例说明python的*args和**kwargs用法
2013/11/01 Python
python3.6生成器yield用法实例分析
2019/08/23 Python
关于pytorch处理类别不平衡的问题
2019/12/31 Python
python爬虫构建代理ip池抓取数据库的示例代码
2020/09/22 Python
Django contrib auth authenticate函数源码解析
2020/11/12 Python
HTML5: Web 标准最巨大的飞跃
2008/10/17 HTML / CSS
Trip.com香港网站:Ctrip携程旗下,全球最大的网上旅游社之一
2016/08/01 全球购物
英国最大的经认证的有机超市:Planet Organic
2018/02/02 全球购物
大学毕业生简单自荐信
2013/11/05 职场文书
高中数学教学反思
2014/01/30 职场文书
优秀医生事迹材料
2014/02/12 职场文书
机关干部四风问题自我剖析及整改措施
2014/10/26 职场文书
Golang之sync.Pool使用详解
2021/05/06 Golang
css height属性中的calc方法详解
2021/06/03 HTML / CSS
Golang 入门 之url 包
2022/05/04 Golang