Python sqlalchemy时间戳及密码管理实现代码详解
作者:viewts 发布时间:2021-05-06 10:43:35
标签:Python,sqlalchemy,时间,戳,密码
一、时间戳
实际开发中,我们一般希望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来校验密码。
来源:https://www.cnblogs.com/viewts/p/13273470.html


猜你喜欢
- 讲解我们的爬虫之前,先概述关于爬虫的简单概念(毕竟是零基础教程)爬虫网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟浏览器发送网络请求,接收
- 一、前言在Python开发的过程中,为了实现某项功能,经常需要对某些字符串进行特殊的处理,如拼接字符串、截取字符串、格式化字符串等。下面将对
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "h
- 工作中遇到大概20万的数据插入操作,程序编完后发现运行超时,修改PHP最大执行时间到600,还是超时,检查超时前插入的数据条数推算一下,大概
- 1.假如有下述表格mytabe字段1 username 字符串型(姓名)字段2 &nb
- Python现在是最热门的人工智能语言,各种工具的支持如Google的Tensorflow,都是首选支持Python的。但是,与R语言不同,
- 加上设置字符编码的方法:response.setHeader("charset","gb2312")
- 前言在Django使用Celery异步发送邮件的过程中,遇到Celery日志提示任务已接收,但实际上任务并没有执行,解决后特此记录。使用版本
- 在python中,通过导入random库,就能使用randint 和 randrange这两个方法来产生随机整数。那这两个方法的区别在于什么
- 1、引言通过参考相关博客对hdf5格式简要介绍。hdf5在存储的是支持压缩,使用的方式是blosc,这个是速度最快的也是pandas默认支持
- 本文实例讲述了Python3最长回文子串算法。分享给大家供大家参考,具体如下:1. 暴力法思路:对每一个子串判断是否回文class Solu
- 在批评Python的讨论中,常常说起Python多线程是多么的难用。还有人对 global interpreter lock(也被亲切的称为
- 搜索答案搜索不到,自己试了一把.首先生成一维数组a =np.array([1,2,3,4,5,6,7,8,9])>>> p
- 本文实例为大家分享了python绘制直线的具体代码,供大家参考,具体内容如下#!/usr/bin/env pythonimport vtk#
- 函数代码function is_valid_filename($name) { $parts = preg_split(&quo
- 本文章来为各位介绍一个python的例子,这个就是bootstrap+flask写登录页面的例子,希望文章能够对各位有所帮助。Flask是一
- 数据读取与保存Text文件对于 Text文件的读取和保存 ,其语法和实现是最简单的,因此我只是简单叙述一下这部分相关知识点,大家可以结合de
- meta是html语言head区的一个辅助性标签。几乎所有的网页里,我们可以看到类似下面这段的html代码:<head> <meta&nbs
- 本文实例讲述了django框架自定义模板标签(template tag)操作。分享给大家供大家参考,具体如下:django 提供了丰富的模板
- 找遍资料得出结果:不能 不过同时也找到了解决办法,就是用iframe的方式来提交表单,即实现无刷新提交表单又可以上传文件! 一、HTML代码