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 相关文章推荐
使用setup.py安装python包和卸载python包的方法
Nov 27 Python
自动化Nginx服务器的反向代理的配置方法
Jun 28 Python
Scrapy-redis爬虫分布式爬取的分析和实现
Feb 07 Python
python logging日志模块的详解
Oct 29 Python
python嵌套字典比较值与取值的实现示例
Nov 03 Python
python with提前退出遇到的坑与解决方案
Jan 05 Python
python如何让类支持比较运算
Mar 20 Python
python安装pil库方法及代码
Jun 25 Python
微信小程序python用户认证的实现
Jul 29 Python
查看Python依赖包及其版本号信息的方法
Aug 13 Python
Django对models里的objects的使用详解
Aug 17 Python
python使用numpy中的size()函数实例用法详解
Jan 29 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
从C/C++迁移到PHP——判断字符类型的函数
2006/10/09 PHP
PHP5.5在windows安装使用memcached服务端的方法
2014/04/16 PHP
调试PHP程序的多种方法介绍
2014/11/06 PHP
PHP实现带重试功能的curl连接示例
2016/07/28 PHP
广告显示判断
2006/08/31 Javascript
JavaScript原型继承之基础机制分析
2011/08/26 Javascript
js 获取时间间隔实现代码
2014/05/12 Javascript
jquery插件orbit.js实现图片折叠轮换特效
2015/04/14 Javascript
AngularJs bootstrap搭载前台框架——准备工作
2016/09/01 Javascript
JS取数字小数点后两位或n位的简单方法
2016/10/24 Javascript
javascript 使用正则test( )第一次是 true,第二次是false
2017/02/22 Javascript
基于JavaScript实现弹幕特效
2020/08/27 Javascript
js定时器实现倒计时效果
2017/11/05 Javascript
vue 国际化 vue-i18n 双语言 语言包
2018/06/07 Javascript
Vue基础配置讲解
2019/11/29 Javascript
vue实现数据控制视图的原理解析
2020/01/07 Javascript
[01:48]2018DOTA2亚洲邀请赛主赛事第二日五佳镜头 VG完美团战逆转TNC
2018/04/05 DOTA
[01:32:50]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第一场 1月25日
2021/03/11 DOTA
Python标准模块--ContextManager上下文管理器的具体用法
2017/11/27 Python
python 读入多行数据的实例
2018/04/19 Python
Python3.6实现连接mysql或mariadb的方法分析
2018/05/18 Python
Python实现深度遍历和广度遍历的方法
2019/01/22 Python
PyQt5多线程防卡死和多窗口用法的实现
2020/09/15 Python
BeautifulSoup中find和find_all的使用详解
2020/12/07 Python
CSS3移动端vw+rem不依赖JS实现响应式布局的方法
2019/01/23 HTML / CSS
详解canvas.toDataURL()报错的解决方案全都在这了
2020/03/31 HTML / CSS
来自美国主售篮球鞋的零售商店:KICKSUSA
2017/11/28 全球购物
荷兰领先的百货商店:De Bijenkorf
2018/10/17 全球购物
全球工业:Global Industrial
2020/02/01 全球购物
寻找迷宫的一条出路,o通路;X:障碍
2016/07/10 面试题
大学生党员学习焦裕禄精神思想汇报
2014/09/10 职场文书
调任通知
2015/04/21 职场文书
小学生作文写作技巧100例,非常实用!
2019/07/08 职场文书
用Python远程登陆服务器的步骤
2021/04/16 Python
python井字棋游戏实现人机对战
2022/04/28 Python
Redis配置外网可访问(redis远程连接不上)的方法
2022/12/24 Redis