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完全新手教程
Feb 08 Python
Flask框架中密码的加盐哈希加密和验证功能的用法详解
Jun 07 Python
Python 数据结构之队列的实现
Jan 22 Python
Python使用PDFMiner解析PDF代码实例
Mar 27 Python
Tornado协程在python2.7如何返回值(实现方法)
Jun 22 Python
python numpy数组的索引和切片的操作方法
Oct 20 Python
详解Python with/as使用说明
Dec 13 Python
对python模块中多个类的用法详解
Jan 10 Python
django-orm F对象的使用 按照两个字段的和,乘积排序实例
May 18 Python
安装Anaconda3及使用Jupyter的方法
Oct 27 Python
全网最全python库selenium自动化使用详细教程
Jan 12 Python
Python  序列化反序列化和异常处理的问题小结
Dec 24 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和XSL stylesheets转换XML文档
2006/10/09 PHP
php4的session功能评述(一)
2006/10/09 PHP
memcached 和 mysql 主从环境下php开发代码详解
2010/05/16 PHP
如何用javascript判断录入的日期是否合法
2007/01/08 Javascript
Jquery 的outerHeight方法使用介绍
2013/09/11 Javascript
JS对select控件option选项的增删改查示例代码
2013/10/21 Javascript
图片上传插件jquery.uploadify详解
2013/11/15 Javascript
在jquery中combobox多选的不兼容问题总结
2013/12/24 Javascript
炫酷的js手风琴效果
2016/10/13 Javascript
jQuery实现CheckBox全选、全不选功能
2017/01/11 Javascript
js实现随机点名小功能
2017/08/17 Javascript
Angular中封装fancyBox(图片预览)遇到问题小结
2017/09/01 Javascript
webpack之引入图片的实现及问题
2018/10/08 Javascript
解决在Vue中使用axios用form表单出现的问题
2019/10/30 Javascript
JS数组方法join()用法实例分析
2020/01/18 Javascript
Python深入学习之闭包
2014/08/31 Python
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
2018/02/13 Python
pycharm 配置远程解释器的方法
2018/10/28 Python
python实现文本界面网络聊天室
2018/12/12 Python
python用opencv 图像傅里叶变换
2021/01/04 Python
理肤泉美国官网:La Roche-Posay
2018/01/17 全球购物
澳大利亚领先的在线葡萄酒零售商:Get Wines Direct
2018/03/27 全球购物
美国羽绒床上用品第一品牌:Pacific Coast
2018/08/25 全球购物
亚马逊墨西哥站:Amazon.com.mx
2018/08/26 全球购物
Viking比利时:购买办公用品
2019/10/30 全球购物
database面试题
2013/03/28 面试题
应届生服装设计自我评价
2013/09/20 职场文书
计算机专业自荐信
2013/10/14 职场文书
大众服装店创业计划书范文
2014/01/01 职场文书
三年级学生评语
2014/04/23 职场文书
纪检监察建议书
2014/05/19 职场文书
个人委托书
2014/07/31 职场文书
大学毕业典礼演讲稿
2014/09/09 职场文书
幼儿园中班教师个人总结
2015/02/05 职场文书
辞职信模板(中英文版)
2015/02/27 职场文书
民主生活会主持词
2015/07/01 职场文书