import random import re from datetime import datetime from passlib.context import CryptContext pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") def verify_password(plain_password, hashed_password): return pwd_context.verify(plain_password, hashed_password) def get_password_hash(password): return pwd_context.hash(password) def get_total_pages(total, limit): """ 获取总页数 :param total: :param limit: :return: """ s = total / limit if total % limit == 0 else total / limit + 1 return round(s) def get_page_result(page, limit, rows, data): """获取分页结果 page 查询页 limit 每页大小 rows 总条数 data 当前页数据 """ return {"totalRecords": rows, "totalPages": get_total_pages(rows, limit), "currentPage": page, "items": data} # data def create_batch(): """创建批号""" return datetime.now().strftime('%Y%m%d%H%M%S') + str(random.random())[-6:] def validate_email(email: str) -> bool: """验证邮箱""" pattern = r"[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)" if re.match(pattern, email) is not None: return True else: return False def validate_phone_number(phone_number: str) -> bool: """验证手机号""" pattern = r"1[356789]\d{9}" if re.match(pattern, phone_number) is not None: return True else: return False