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 相关文章推荐
对dataframe进行列相加,行相加的实例
Jun 08 Python
Python爬虫常用小技巧之设置代理IP
Sep 13 Python
Python 使用类写装饰器的小技巧
Sep 30 Python
python爬虫获取新浪新闻教学
Dec 23 Python
python判断字符串或者集合是否为空的实例
Jan 23 Python
python读取有密码的zip压缩文件实例
Feb 08 Python
pytorch中的embedding词向量的使用方法
Aug 18 Python
python装饰器相当于函数的调用方式
Dec 27 Python
Python生成器常见问题及解决方案
Mar 21 Python
Python创建临时文件和文件夹
Aug 05 Python
python给list排序的简单方法
Dec 10 Python
宝塔更新Python及Flask项目的部署
Apr 11 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
19个超实用的PHP代码片段
2014/03/14 PHP
ThinkPHP安装和设置
2015/07/27 PHP
php生成无限栏目树
2017/03/16 PHP
PHP基于新浪IP库获取IP详细地址的方法
2017/05/04 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
让你的PHP,APACHE,NGINX支持大文件上传
2021/03/09 PHP
jQuery 在光标定位的地方插入文字的插件
2012/05/10 Javascript
JS对话框_JS模态对话框showModalDialog用法总结
2014/01/11 Javascript
javascript常用代码段搜集
2014/12/04 Javascript
JS动态添加Table的TR,TD实现方法
2015/01/28 Javascript
以Python代码实例展示kNN算法的实际运用
2015/10/26 Javascript
jQuery实现简单倒计时功能的方法
2016/07/04 Javascript
js仿微信语音播放实现思路
2016/12/12 Javascript
JS数组求和的常用方法总结【5种方法】
2019/01/14 Javascript
200行HTML+JavaScript实现年会抽奖程序
2019/01/22 Javascript
Vue 引入AMap高德地图的实现代码
2019/04/29 Javascript
详解datagrid使用方法(重要)
2020/11/06 Javascript
[00:12]2018DOTA2亚洲邀请赛 sylar表现SOLO技艺
2018/04/06 DOTA
[06:44]2018DOTA2亚洲邀请赛4.5 SOLO赛 MidOne vs Sumail
2018/04/06 DOTA
Python中使用PyQt把网页转换成PDF操作代码实例
2015/04/23 Python
python3 pillow模块实现简单验证码
2019/10/31 Python
Python opencv相机标定实现原理及步骤详解
2020/04/09 Python
Pycharm激活方法及详细教程(详细且实用)
2020/05/12 Python
python tqdm库的使用
2020/11/30 Python
python 进制转换 int、bin、oct、hex的原理
2021/01/13 Python
世界上最大的在线学习和教学市场:Udemy
2017/11/08 全球购物
美国亚马逊旗下时尚女装网店:SHOPBOP(支持中文)
2020/10/17 全球购物
PHP如何对用户密码进行加密
2014/07/31 面试题
女方婚礼新郎答谢词
2014/01/11 职场文书
《爱如茉莉》教后反思
2014/04/12 职场文书
挂牌仪式策划方案
2014/05/18 职场文书
停车位租赁协议书
2014/09/24 职场文书
60条职场经典语录,总有一条能触动你的心
2019/08/21 职场文书
本地通过nginx配置反向代理的全过程记录
2021/03/31 Servers
详细总结Python常见的安全问题
2021/05/21 Python
JAVA springCloud项目搭建流程
2022/05/11 Java/Android