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回调函数的使用方法
Jan 23 Python
Windows和Linux下使用Python访问SqlServer的方法介绍
Mar 10 Python
python模拟表单提交登录图书馆
Apr 27 Python
Django如何自定义分页
Sep 25 Python
Python数据集切分实例
Dec 08 Python
详解将Python程序(.py)转换为Windows可执行文件(.exe)
Jul 19 Python
学python安装的软件总结
Oct 12 Python
python多继承(钻石继承)问题和解决方法简单示例
Oct 21 Python
Python matplotlib修改默认字体的操作
Mar 05 Python
Python实现动态循环输出文字功能
May 07 Python
Python接收手机短信的代码整理
Aug 02 Python
如何使用Python进行PDF图片识别OCR
Jan 22 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 魔术函数使用说明
2010/05/14 PHP
php中全局变量global的使用演示代码
2011/05/18 PHP
php-fpm开启状态统计的方法详解
2017/06/23 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
PHP实现将base64编码字符串转换成图片示例
2018/06/22 PHP
window resize和scroll事件的基本优化思路
2014/04/29 Javascript
jquery $.trim()方法使用介绍
2014/05/21 Javascript
在Web项目中引入Jquery插件报错的完美解决方案(图解)
2016/09/19 Javascript
bootstrap网格系统使用方法解析
2017/01/13 Javascript
Angular在一个页面中使用两个ng-app的方法(二)
2017/02/20 Javascript
nodejs使用express创建一个简单web应用
2017/03/31 NodeJs
Angular2里获取(input file)上传文件的内容的方法
2017/09/05 Javascript
详解关于element el-button使用$attrs的一个注意要点
2018/11/09 Javascript
JS中超越现实的匿名函数用法实例分析
2019/06/21 Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
2019/09/03 Javascript
JavaScript进阶(二)词法作用域与作用域链实例分析
2020/05/09 Javascript
vue自动添加浏览器兼容前后缀操作
2020/08/13 Javascript
浅谈django rest jwt vue 跨域问题
2018/10/26 Python
Python在图片中插入大量文字并且自动换行
2019/01/02 Python
Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题
2019/07/04 Python
Python使用字典实现的简单记事本功能示例
2019/08/15 Python
python KNN算法实现鸢尾花数据集分类
2019/10/24 Python
使用卷积神经网络(CNN)做人脸识别的示例代码
2020/03/27 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
2020/06/14 Python
使用Python文件读写,自定义分隔符(custom delimiter)
2020/07/05 Python
python对输出的奇数偶数排序实例代码
2020/12/04 Python
世界领先的电子书网站:eBooks.com(在线购买小说、非小说和教科书)
2019/03/30 全球购物
泰国最新活动和优惠:Megatix
2020/05/07 全球购物
商场中秋节活动方案
2014/02/07 职场文书
学校招生宣传广告词
2014/03/19 职场文书
《大海那边》教学反思
2014/04/09 职场文书
捐书倡议书
2014/08/29 职场文书
银行员工犯错检讨书
2014/09/16 职场文书
2015年双拥工作总结
2015/04/08 职场文书
少年的你:世界上没有如果,要在第一次就勇敢的反抗
2019/11/20 职场文书
浅谈MySQL函数
2021/10/05 MySQL