1. 新增:微信小程序端新增微信手机号登录功能(必须为企业认证小程序) 2. 新增:加入动态更新常见问题 3. 新增:新增小程序分享功能 4. 新增:小程序新增第一次登录需要修改密码 5. 新增:新增接口权限控制 6. 新增:用户新增is_staff用来判断是否为工作人员 7. 新增:软删除新增is_delete字段来判断,delete_datetime当前主要来记录时间 8. 更新:部分接口删除功能已更新,需要试用软删除的才会试用软删除 9. 更新:更新系统配置缓存功能 10. 更新:接口认证依赖项更新 11. 更新:获取系统基础配置信息与用户协议与隐私协议更新 12. 优化:优化接口与数据库操作
81 lines
2.5 KiB
Python
81 lines
2.5 KiB
Python
#!/usr/bin/python
|
||
# -*- coding: utf-8 -*-
|
||
# @version : 1.0
|
||
# @Creaet Time : 2022/10/9 17:09
|
||
# @File : tools.py
|
||
# @IDE : PyCharm
|
||
# @desc : 工具类
|
||
|
||
import datetime
|
||
import random
|
||
import re
|
||
import string
|
||
from typing import List, Union
|
||
|
||
|
||
def test_password(password: str) -> Union[str, bool]:
|
||
"""
|
||
检测密码强度
|
||
"""
|
||
if len(password) < 8 or len(password) > 16:
|
||
return '长度需为8-16个字符,请重新输入。'
|
||
else:
|
||
for i in password:
|
||
if 0x4e00 <= ord(i) <= 0x9fa5 or ord(i) == 0x20: # Ox4e00等十六进制数分别为中文字符和空格的Unicode编码
|
||
return '不能使用空格、中文,请重新输入。'
|
||
else:
|
||
key = 0
|
||
key += 1 if bool(re.search(r'\d', password)) else 0
|
||
key += 1 if bool(re.search(r'[A-Za-z]', password)) else 0
|
||
key += 1 if bool(re.search(r"\W", password)) else 0
|
||
if key >= 2:
|
||
return True
|
||
else:
|
||
return '至少含数字/字母/字符2种组合,请重新输入。'
|
||
|
||
|
||
def list_dict_find(options: List[dict], key: str, value: any) -> Union[dict, None]:
|
||
"""
|
||
字典列表查找
|
||
"""
|
||
for item in options:
|
||
if item.get(key) == value:
|
||
return item
|
||
return None
|
||
|
||
|
||
def get_time_interval(start_time: str, end_time: str, interval: int, time_format: str = "%H:%M:%S") -> List:
|
||
"""
|
||
获取时间间隔
|
||
:param end_time: 结束时间
|
||
:param start_time: 开始时间
|
||
:param interval: 间隔时间(分)
|
||
:param time_format: 字符串格式化,默认:%H:%M:%S
|
||
"""
|
||
if start_time.count(":") == 1:
|
||
start_time = f"{start_time}:00"
|
||
if end_time.count(":") == 1:
|
||
end_time = f"{end_time}:00"
|
||
start_time = datetime.datetime.strptime(start_time, "%H:%M:%S")
|
||
end_time = datetime.datetime.strptime(end_time, "%H:%M:%S")
|
||
time_range = []
|
||
while end_time > start_time:
|
||
time_range.append(start_time.strftime(time_format))
|
||
start_time = start_time + datetime.timedelta(minutes=interval)
|
||
return time_range
|
||
|
||
|
||
def generate_string(length: int = 8) -> str:
|
||
"""
|
||
生成随机字符串
|
||
:param length: 字符串长度
|
||
"""
|
||
return ''.join(random.sample(string.ascii_letters + string.digits, length))
|
||
|
||
|
||
if __name__ == '__main__':
|
||
# print(generate_invitation_code())
|
||
# print(int(datetime.datetime.now().timestamp()))
|
||
# print(datetime.datetime.today() + datetime.timedelta(days=7))
|
||
print(generate_string())
|