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创建只读属性对象的方法(ReadOnlyObject)
Feb 10 Python
python聊天程序实例代码分享
Nov 18 Python
查看Python安装路径以及安装包路径小技巧
Apr 28 Python
详解python中asyncio模块
Mar 03 Python
解决python3 网络请求路径包含中文的问题
May 10 Python
Python定义二叉树及4种遍历方法实例详解
Jul 05 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
Dec 05 Python
pyqt5使用按钮进行界面的跳转方法
Jun 19 Python
Python Switch Case三种实现方法代码实例
Jun 18 Python
python实现网页录音效果
Oct 26 Python
python eventlet绿化和patch原理
Nov 21 Python
python selenium 获取接口数据的实现
Dec 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垃圾回收机制引用计数器概念分析
2013/06/24 PHP
tp5(thinkPHP5)框架数据库Db增删改查常见操作总结
2019/01/10 PHP
connect中间件session、cookie的使用方法分享
2014/06/17 Javascript
Javascript中Array用法实例分析
2015/06/13 Javascript
js编写的treeview使用方法
2016/11/11 Javascript
关于js函数解释(包括内嵌,对象等)
2016/11/20 Javascript
js自定义弹框插件的封装
2020/08/24 Javascript
十分钟带你快速了解React16新特性
2017/11/10 Javascript
原生JavaScript实现Ajax异步请求
2017/11/19 Javascript
vue页面离开后执行函数的实例
2018/03/13 Javascript
微信小程序当前时间时段选择器插件使用方法详解
2018/12/28 Javascript
vue用BMap百度地图实现即时搜索功能
2019/09/26 Javascript
js实现轮播图效果 z-index实现轮播图
2020/01/17 Javascript
使用JavaScript实现网页秒表功能(含开始、暂停、继续、重置功能)
2020/06/05 Javascript
[02:28]DOTA2英雄基础教程 狼人
2013/12/23 DOTA
[38:42]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第二场 11.05
2020/11/05 DOTA
使用python3.5仿微软记事本notepad
2016/06/15 Python
python爬虫获取百度首页内容教学
2018/12/23 Python
Python函数式编程实例详解
2020/01/17 Python
简单了解Java Netty Reactor三种线程模型
2020/04/26 Python
HTML5 canvas实现雪花飘落特效
2016/03/08 HTML / CSS
植物选择:Botanic Choice
2017/02/15 全球购物
英国领先的杂志订阅网站:Magazine.co.uk
2018/01/25 全球购物
马来西亚在线健康商店:Medipal Malaysia
2020/04/13 全球购物
澳大利亚网上书店:QBD
2021/01/09 全球购物
学校门卫工作职责
2013/12/07 职场文书
中学实习教师自我鉴定
2013/12/12 职场文书
高中生家长会演讲稿
2014/01/14 职场文书
年会活动策划方案
2014/01/23 职场文书
学习自我鉴定
2014/02/01 职场文书
物控部经理职务说明书
2014/02/25 职场文书
投标承诺书怎么写
2014/05/24 职场文书
2014年教师节演讲稿范文
2014/09/10 职场文书
2015团员个人年度总结
2015/11/24 职场文书
MySQL索引篇之千万级数据实战测试
2021/04/05 MySQL
《暗黑破坏神2:重制版》本周进行第一轮A测 目前可官网进行申请报名
2021/04/07 其他游戏