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转换字符串为摩尔斯电码的方法
Jul 06 Python
pandas 实现将重复表格去重,并重新转换为表格的方法
Apr 18 Python
python-docx修改已存在的Word文档的表格的字体格式方法
May 08 Python
python dataframe 输出结果整行显示的方法
Jun 14 Python
win10下tensorflow和matplotlib安装教程
Sep 19 Python
对Python通过pypyodbc访问Access数据库的方法详解
Oct 27 Python
Django保护敏感信息的方法示例
May 09 Python
解决Pycharm 包已经下载,但是运行代码提示找不到模块的问题
Aug 31 Python
将pytorch转成longtensor的简单方法
Feb 18 Python
PyTorch中的C++扩展实现
Apr 02 Python
python 基于opencv实现高斯平滑
Dec 18 Python
python opencv人脸识别考勤系统的完整源码
Apr 26 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之第四天
2006/10/09 PHP
PHP中操作ini配置文件的方法
2013/04/25 PHP
php的$_FILES的临时储存文件与回收机制实测过程
2013/07/12 PHP
神盾加密解密教程(三)PHP 神盾解密工具
2014/06/08 PHP
CentOS安装php v8js教程
2015/02/26 PHP
总结PHP删除字符串最后一个字符的三种方法
2016/08/30 PHP
详解php中curl返回false的解决办法
2019/03/18 PHP
js和jquery使按钮失效为不可用状态的方法
2014/01/26 Javascript
javascript中Date()函数在各浏览器中的显示效果
2015/06/18 Javascript
使用javascript插入样式
2016/03/14 Javascript
浅谈Sublime Text 3运行JavaScript控制台
2016/06/06 Javascript
简单实现js页面切换功能
2021/01/10 Javascript
NodeJS链接MySql数据库的操作方法
2017/06/27 NodeJs
vue-router 路由基础的详解
2017/10/17 Javascript
如何去除富文本中的html标签及vue、react、微信小程序中的过滤器
2018/11/21 Javascript
jquery获取img的src值实例介绍
2019/01/16 jQuery
通过JS运行机制的角度说说作用域
2019/03/12 Javascript
Nodejs监控事件循环异常示例详解
2019/09/22 NodeJs
Vue.js下拉菜单组件使用方法详解
2019/10/19 Javascript
vue使用screenfull插件实现全屏功能
2020/09/17 Javascript
[01:36]DOTA2完美大师赛趣味视频之与队友相处的十万个技巧
2017/11/19 DOTA
python flask中静态文件的管理方法
2018/03/20 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
2019/06/24 Python
利用Pytorch实现简单的线性回归算法
2020/01/15 Python
Python常用数据分析模块原理解析
2020/07/20 Python
如何使用PyCharm引入需要使用的包的方法
2020/09/22 Python
Django如何实现防止XSS攻击
2020/10/13 Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
2021/03/03 Python
如何避免常见的6种HTML5错误用法
2017/11/06 HTML / CSS
德国最大的拼图在线商店:Puzzle.de
2016/12/17 全球购物
奥斯汀独木舟和皮划艇:Austin Canoe & Kayak
2018/05/22 全球购物
Feelunique美国:欧洲大型的在线美妆零售电商
2018/11/04 全球购物
主治医师岗位职责
2013/12/10 职场文书
2014五年级班主任工作总结
2014/12/05 职场文书
护士个人年度总结范文
2015/02/13 职场文书
幼师自荐信范文(2016推荐篇)
2016/01/28 职场文书