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下singleton模式的实现方法
Jul 16 Python
Django框架下在URLconf中指定视图缓存的方法
Jul 23 Python
详解Python中contextlib上下文管理模块的用法
Jun 28 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
Jan 26 Python
Python3生成手写体数字方法
Jan 30 Python
Python网络编程之TCP与UDP协议套接字用法示例
Feb 02 Python
python装饰器深入学习
Apr 06 Python
用Python读取几十万行文本数据
Dec 24 Python
python 通过麦克风录音 生成wav文件的方法
Jan 09 Python
Python 内置函数globals()和locals()对比详解
Dec 23 Python
Pytorch 图像变换函数集合小结
Feb 01 Python
python获取对象信息的实例详解
Jul 07 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 中的输出缓冲
2006/12/21 PHP
关于php支持分块与断点续传文件下载功能代码
2014/05/09 PHP
php实现指定字符串中查找子字符串的方法
2015/03/17 PHP
使用XHGui来测试PHP性能的教程
2015/07/03 PHP
JS与框架页的操作代码
2010/01/17 Javascript
扩展jQuery对象时如何扩展成员变量具体怎么实现
2014/04/25 Javascript
Jquery 分页插件之Jquery Pagination
2015/08/25 Javascript
bootstrap-wysiwyg结合ajax实现图片上传实时刷新功能
2016/05/27 Javascript
利用Angularjs和Bootstrap前端开发案例实战
2016/08/27 Javascript
jQuery Dialog 取消右上角删除按钮事件
2016/09/07 Javascript
seajs模块之间依赖的加载以及模块的执行
2016/10/21 Javascript
javascript垃圾收集机制的原理分析
2016/12/08 Javascript
BootStrap3使用错误记录及解决办法
2016/12/22 Javascript
Vue.js实现网格列表布局转换方法
2017/08/25 Javascript
vue登录路由验证的实现
2017/12/13 Javascript
vue2.0 移动端实现下拉刷新和上拉加载更多的示例
2018/04/23 Javascript
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
2018/08/27 Javascript
webpack 从指定入口文件中提取公共文件的方法
2018/11/13 Javascript
通过js示例讲解时间复杂度与空间复杂度
2019/08/06 Javascript
原生JavaScript实现留言板
2021/01/10 Javascript
[01:27]DOTA2电竞之夜 今夜共饮庆功酒
2014/08/02 DOTA
用python实现的去除win下文本文件头部BOM的代码
2013/02/10 Python
python批量修改文件名的实现代码
2014/09/01 Python
跟老齐学Python之dict()的操作方法
2014/09/24 Python
python定向爬虫校园论坛帖子信息
2018/07/23 Python
详解Python3中setuptools、Pip安装教程
2019/06/18 Python
Python实现手机号自动判断男女性别(实例解析)
2019/12/22 Python
Pytorch 实现focal_loss 多类别和二分类示例
2020/01/14 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
2020/02/17 Python
canvas中普通动效与粒子动效的实现代码示例
2019/01/03 HTML / CSS
阿迪达斯希腊官方网上商店:adidas希腊
2019/04/06 全球购物
乌克兰排名第一的在线旅游超市:Farvater.Travel
2020/01/02 全球购物
抽奖活动主持词
2014/03/31 职场文书
上诉答辩状范文
2015/05/22 职场文书
风之谷观后感
2015/06/11 职场文书
神州牡丹园的导游词
2019/11/20 职场文书