一. uuid
uuid (universally unique identifier) 是通用唯一识别码,是用于计算机体系中以识别信息数目的一个128位标识符,具有唯一性,因此可用来生成用户 id,Python 中有 uuid 库。UUID 有五种实现,uuid1(), uuid2(), uuid3(), uuid4(), uuid5(),但 Python 中没有 uuid2(),它们的区别如下:
1. uuid1() —— 基于时间戳。由 Mac 地址、当前时间戳、随机数生成,可以保证全球唯一性,但 Mac 使用可能带来安全性问题,局域网中可以使用 IP 来代替 Mac。
2. uuid3() —— 基于名字的 MD5 散列值。通过计算名字和命名空间的 MD5 散列值得到,同一命名空间的同一名字生成相同的 uuid。
3. uuid4() —— 基于随机数。由伪随机数得到,有一定的重复概率,最好不用。
4. uuid5() —— 基于名字的 SHA-1 散列值。算法同 uuid3(),不同的是使用 Secure Hash Algorithm 1 算法。
总结:
1. uuid4 存在概率重复,最好不用。
2. 在 Global 的分布式计算环境下,最好用 uuid1。
3. 若有名字的唯一性要求,最好用 uuid3 和 uuid5,我使用的是 uuid3,如下:
import uuid
id = uuid.uuid3(uuid.NAMESPACE_DNS, namestr)
(参考:使用 UUID 库生成唯一 ID)
二. fake
faker 是伪造数据生成器,可以用来伪造各种数据,例如:姓名、密码、地址、时间、电话号码等等。
用法如下:
from faker import Faker
faker = Faker('zh_CN') # 伪造中文数据,默认为 ’en_US’
name = faker.name()
(参考:【Python】伪造数据使用faker库)
三. 加密后的密码
Python 中密码加密存储方式有两种:
1. Flask 框架中常用的哈希加密模块:werkzeug.security
2. hashlib 中的两种加密算法:sha1 和 MD5,这两种加密过程均不可逆,用法如下:
import hashlib
hashlib_obj = hashlib.sha256()
password = '1234' # 也可以使用 fake 来生成伪造密码数据
hashlib_obj.update(password.encode())
password_digest = hashlib_obj.hexdigest()
(参考:Python中密码加密存储)
(参考:【Python】伪造数据使用faker库)
四. 创建时间和更新时间的生成
使用 faker 伪造时间信息,注意:“创建时间” 要早于 “更新时间”。
from faker import Faker
time1 = faker.date_time()
time2 = faker.date_time()
created = str(min(time1, time2))
updated = str(max(time1, time2))
(参考:Python获取当前时间及时间转换)
五. redis 数据库的使用
尤其要注意数据类型的转换!例如:redis.set() 操作对象是 String 类型,因此,入库前要用 json.dumps( ) 先转换为字符串类型,出库后如果要用字典操作,要先用 json.loads( ) 转换为字典类型。
import redis
import json
pool = redis.ConnectionPool(host='host.docker.internal', port=6379, decode_responses=True)
r = redis.Redis(connection_pool=pool)
# 清空旧的用户数据(无返回值)
def clear_usrIfo():
r.flushall()
# 用户信息
usrIfo = {'name': name, 'password_digest': password_digest, 'created': created, 'updated': updated}
usrIfo_new = json.dumps(usrIfo)
# 写入redis库
r.set(str(id), usrIfo_new)
(参考:Redis 安装配置)
(参考:Redis Desktop Manager windows(Redis桌面管理工具) 安装及使用方法)
(参考:将python数据存入redis中,键取字符串类型)
(参考:Python操作Redis数据库)
(参考:redis 启动和关闭)