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 10 Python
Python 3.x 连接数据库示例(pymysql 方式)
Jan 19 Python
Python SQLite3数据库日期与时间常见函数用法分析
Aug 14 Python
Sanic框架Cookies操作示例
Jul 17 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
Sep 02 Python
Python3中函数参数传递方式实例详解
May 05 Python
python实现抽奖小程序
Apr 15 Python
使用 Python 快速实现 HTTP 和 FTP 服务器的方法
Jul 22 Python
python中with用法讲解
Feb 07 Python
python实现井字棋小游戏
Mar 04 Python
在django中实现choices字段获取对应字段值
Jul 12 Python
M1芯片安装python3.9.1的实现
Feb 02 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
杏林同学录(二)
2006/10/09 PHP
用示例说明filter()与find()的用法以及children()与find()的区别分析
2013/04/26 Javascript
Javascript中的高阶函数介绍
2015/03/15 Javascript
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
使用base64对图片的二进制进行编码并用ajax进行显示
2017/01/03 Javascript
Javascript ES6中对象类型Sets的介绍与使用详解
2017/07/17 Javascript
Three.js利用Detector.js插件如何实现兼容性检测详解
2017/09/26 Javascript
mongoose更新对象的两种方法示例比较
2017/12/19 Javascript
Js图片点击切换轮播实现代码
2020/07/27 Javascript
[01:39](回顾)各路豪强针锋相对,几经鏖战四强产生
2014/07/01 DOTA
[15:39]教你分分钟做大人:龙骑士
2014/10/30 DOTA
python的迭代器与生成器实例详解
2014/07/16 Python
Python学习之asyncore模块用法实例教程
2014/09/29 Python
python文件操作相关知识点总结整理
2016/02/22 Python
Python爬取qq music中的音乐url及批量下载
2017/03/23 Python
Python编程修改MP3文件名称的方法
2017/04/19 Python
python的debug实用工具 pdb详解
2019/07/12 Python
提升Python效率之使用循环机制代替递归函数
2019/07/23 Python
python 利用pywifi模块实现连接网络破解wifi密码实时监控网络
2019/09/16 Python
Python性能分析工具py-spy原理用法解析
2020/07/27 Python
Python Map 函数的使用
2020/08/28 Python
python boto和boto3操作bucket的示例
2020/10/30 Python
Python使用Turtle模块绘制国旗的方法示例
2021/02/28 Python
HTML5实现分享到微信好友朋友圈QQ好友QQ空间微博二维码功能
2018/01/03 HTML / CSS
HTML5 Canvas的事件处理介绍
2015/04/24 HTML / CSS
Viking Direct爱尔兰:办公用品和家具
2019/11/21 全球购物
美国办公用品折扣网站:Shoplet.com
2019/11/24 全球购物
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2014/01/19 面试题
大学生暑期实践感言
2014/02/26 职场文书
微电影大赛策划方案
2014/06/05 职场文书
环保标语口号
2014/06/13 职场文书
2014年市场部工作总结
2014/11/25 职场文书
北京英文导游词
2015/02/12 职场文书
母亲节主题班会
2015/08/14 职场文书
Python matplotlib 利用随机函数生成变化图形
2022/04/26 Python