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中mechanize库的简单使用示例
Jan 10 Python
python爬虫_自动获取seebug的poc实例
Aug 05 Python
python初学之用户登录的实现过程(实例讲解)
Dec 23 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
Jun 20 Python
一篇文章搞懂Python的类与对象名称空间
Dec 10 Python
解决python3 HTMLTestRunner测试报告中文乱码的问题
Dec 17 Python
Python pycharm 同时加载多个项目的方法
Jan 17 Python
Python使用paramiko操作linux的方法讲解
Feb 25 Python
完美解决python3.7 pip升级 拒绝访问问题
Jul 12 Python
tesserocr与pytesseract模块的使用方法解析
Aug 30 Python
python3排序的实例方法
Oct 20 Python
Python调用高德API实现批量地址转经纬度并写入表格的功能
Jan 12 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 动态多文件上传
2009/01/18 PHP
php简单生成随机数的方法
2015/07/30 PHP
php轻量级的性能分析工具xhprof的安装使用
2015/08/12 PHP
学习PHP的数组总结【经验】
2016/05/05 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
购物车实现的几种方式优缺点对比
2018/05/02 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
2018/06/01 PHP
Laravel5.7框架安装与使用学习笔记图文详解
2019/04/02 PHP
javascript里的条件判断
2007/02/27 Javascript
javascript eval和JSON之间的联系
2009/12/31 Javascript
JavaScript Distilled 基础知识与函数
2010/04/07 Javascript
jQuery实现表单提交时判断的方法
2014/12/13 Javascript
js实现微信分享代码
2020/10/11 Javascript
JavaScript是如何实现继承的(六种方式)
2016/03/31 Javascript
vue2.0路由切换后页面滚动位置不变BUG的解决方法
2018/03/14 Javascript
基于vue中keep-alive缓存问题的解决方法
2018/09/21 Javascript
javascript中的event loop事件循环详解
2018/12/14 Javascript
vue中使用 pako.js 解密 gzip加密字符串的方法
2019/06/10 Javascript
使用vue中的混入mixin优化表单验证插件问题
2019/07/02 Javascript
es6函数之尾递归用法实例分析
2020/04/25 Javascript
小程序实现密码输入框
2020/11/16 Javascript
Python编写一个闹钟功能
2017/07/11 Python
python 并发编程 阻塞IO模型原理解析
2019/08/20 Python
Python 一行代码能实现丧心病狂的功能
2020/01/18 Python
python 截取XML中bndbox的坐标中的图像,另存为jpg的实例
2020/03/10 Python
matplotlib quiver箭图绘制案例
2020/04/17 Python
浅谈Python爬虫原理与数据抓取
2020/07/21 Python
HTML5实现的图片无限加载的瀑布流效果另带边框圆角阴影
2014/03/07 HTML / CSS
草莓网化妆品加拿大网站:Strawberrynet Canada
2016/09/20 全球购物
澳大利亚设计的婴儿和女孩的衣服:Oobi
2018/12/16 全球购物
请解释流与文件有什么不同
2016/07/29 面试题
如何将一个描述日期或日期/时间的字符串转换为一个Date对象
2015/10/13 面试题
特教教师先进事迹
2014/05/21 职场文书
老公保证书怎么写
2015/02/26 职场文书
导游词书写之黄山
2019/08/06 职场文书