Python sqlalchemy時(shí)間戳及密碼管理實(shí)現(xiàn)代碼詳解
一、時(shí)間戳
實(shí)際開發(fā)中,我們一般希望create_time和update_time這兩個(gè)屬性能自動(dòng)設(shè)置,所以在建表的時(shí)候需要在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())
關(guān)于datetime轉(zhuǎn)時(shí)間戳的方法,例如‘2020-07-09 14:15:31'(從數(shù)據(jù)庫讀取一般為字符串),首先需要將它轉(zhuǎn)換成timetuple:
import time
timetuple = time.strptime('2020-07-09 14:15:31', '%Y-%m-%d %H:%M:%S')
如果你拿到的是datetime對(duì)象,那么更簡(jiǎn)單:
now = datetime.datetime.now()
timetuple = now.timetuple()
然后將timetuple轉(zhuǎn)化為時(shí)間戳:
timestamp = int(time.mktime(timetuple))
那么,時(shí)間戳又要如何轉(zhuǎn)回datetime呢?方法如下:
last_time = datetime.datetime.fromtimestamp(timestamp)
二、密碼管理
在數(shù)據(jù)庫中一般不要明文存儲(chǔ)密碼,可以用散列值替換,修改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設(shè)置成只寫,使用verify_password來校驗(yàn)密碼。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python函數(shù)調(diào)用追蹤實(shí)現(xiàn)代碼
這篇文章主要介紹了Python函數(shù)調(diào)用追蹤實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11解決pandas展示數(shù)據(jù)輸出時(shí)列名不能對(duì)齊的問題
今天小編就為大家分享一篇解決pandas展示數(shù)據(jù)輸出時(shí)列名不能對(duì)齊的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11tkinter如何實(shí)現(xiàn)打開文件對(duì)話框并獲取文件絕對(duì)路徑
這篇文章主要介紹了tkinter實(shí)現(xiàn)打開文件對(duì)話框并獲取文件絕對(duì)路徑問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01Python+fuzzywuzzy計(jì)算兩個(gè)字符串之間的相似度
fuzzywuzzy?可以計(jì)算兩個(gè)字符串之間的相似度,它依據(jù)?Levenshtein?Distance?算法來進(jìn)行計(jì)算,該算法又叫?Edit?Distance?算法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-09-09python ftp 按目錄結(jié)構(gòu)上傳下載的實(shí)現(xiàn)代碼
這篇文章主要介紹了python ftp 按目錄結(jié)構(gòu)上傳下載的實(shí)現(xiàn)代碼,需要的朋友可以參考下2018-09-09python實(shí)現(xiàn)簡(jiǎn)易云音樂播放器
這篇文章主要介紹了python實(shí)現(xiàn)簡(jiǎn)易云音樂播放器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01