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 代码性能优化技巧分享
Aug 07 Python
跟老齐学Python之有容乃大的list(3)
Sep 15 Python
Python对列表去重的多种方法(四种方法)
Dec 05 Python
Python通过Pygame绘制移动的矩形实例代码
Jan 03 Python
简单实现python画圆功能
Jan 25 Python
python实现识别手写数字 python图像识别算法
Mar 23 Python
python cs架构实现简单文件传输
Mar 20 Python
python能做什么 python的含义
Oct 12 Python
python查找特定名称文件并按序号、文件名分行打印输出的方法
Apr 24 Python
Python中的全局变量如何理解
Jun 04 Python
python与idea的集成的实现
Nov 20 Python
Pytorch distributed 多卡并行载入模型操作
Jun 05 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通用分页类page.php[仿google分页]
2008/08/31 PHP
php 需要掌握的东西 不做浮躁的人
2009/12/28 PHP
PHP 存储文本换行实现方法
2010/01/05 PHP
js判断变量是否空值的代码
2008/10/26 Javascript
javascript 异常处理使用总结
2009/06/21 Javascript
Javascript 网页黑白效果实现代码(兼容IE/FF等)
2010/04/23 Javascript
js清除input中type等于file的值域(示例代码)
2013/12/24 Javascript
js动态添加onclick事件可传参数与不传参数
2014/07/29 Javascript
js分页工具实例
2015/01/28 Javascript
javascript中AJAX用法实例分析
2015/01/30 Javascript
javascript算法题:求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2015/04/01 Javascript
基于jQuery实现的旋转彩圈实例
2015/06/26 Javascript
利用iscroll4实现轮播图效果实例代码
2017/01/11 Javascript
jQuery插件zTree实现更新根节点中第i个节点名称的方法示例
2017/03/08 Javascript
JavaScript订单操作小程序完整版
2017/06/23 Javascript
nodejs中sleep功能实现暂停几秒的方法
2017/07/12 NodeJs
vue2.0 资源文件assets和static的区别详解
2018/04/08 Javascript
vue引入axios同源跨域问题
2018/09/27 Javascript
微信小程序按钮点击跳转页面详解
2019/05/06 Javascript
Nodejs 微信小程序消息推送的实现
2021/01/20 NodeJs
[04:38]完美世界携手游戏风云打造 卡尔工作室饰品系统篇
2013/04/25 DOTA
深入解析Python中的上下文管理器
2016/06/28 Python
python 根据pid杀死相应进程的方法
2017/01/16 Python
python3+PyQt5泛型委托详解
2018/04/24 Python
浅谈Django的缓存机制
2018/08/23 Python
Python 将 QQ 好友头像生成祝福语的实现代码
2020/05/03 Python
python右对齐的实例方法
2020/07/05 Python
pip install命令安装扩展库整理
2021/03/02 Python
HTML5实现页面切换激活的PageVisibility API使用初探
2016/05/13 HTML / CSS
欧舒丹英国官网:购买欧舒丹护手霜等明星产品
2017/01/17 全球购物
Zavvi美国:英国娱乐之家
2017/03/19 全球购物
优秀大学生推荐信范文
2013/11/28 职场文书
中学教师自我鉴定
2014/02/07 职场文书
小学优秀班集体申报材料
2014/05/25 职场文书
小学班主任教育随笔
2015/08/15 职场文书
PyTorch梯度裁剪避免训练loss nan的操作
2021/05/24 Python