dt / app /utils /validators.py
gitdeem's picture
Upload 96 files
4e9efe9 verified
# utils/validators.py
from datetime import datetime, timedelta
from app.models import SendCode
def validate_verification_code(email: str, code: str, code_type: int):
"""验证验证码有效性[^1]"""
expire_time = datetime.utcnow() - timedelta(minutes=10)
send_code = SendCode.query.filter(
SendCode.send_to == email,
SendCode.code == code,
SendCode.send_type == code_type,
SendCode.created_at > expire_time
).order_by(SendCode.created_at.desc()).first()
if not send_code:
return False, '验证码已过期或无效'
return True, None
def validate_password_confirmation(data: dict):
"""验证密码一致性[^2]"""
if data['password'] != data.get('password_confirmation'):
return False, '两次密码不一致'
return True, None
# utils/validators.py 新增方法
def validate_password_complexity(password: str):
"""密码复杂度验证[^5]"""
if len(password) < 6:
return False, "密码至少需要6位"
if not any(c.isalpha() for c in password) or not any(c.isdigit() for c in password):
return False, "密码需包含字母和数字"
return True, None
# utils/validators.py
from flask import request
from app.utils.response import APIResponse
def validate_pagination_params(req):
"""验证并获取分页参数[^1]
返回:
tuple: (page, limit)
"""
try:
page = int(req.args.get('page', 1))
limit = int(req.args.get('limit', 20))
if page < 1:
raise ValueError('页码必须大于0')
if limit < 1 or limit > 100:
raise ValueError('每页数量必须在1到100之间')
return page, limit
except ValueError as e:
raise APIResponse.error(str(e), 400)
def validate_date_range(start_date, end_date):
"""验证日期范围参数[^2]
参数:
start_date (str): 起始日期
end_date (str): 结束日期
返回:
tuple: (start_date, end_date) 转换后的datetime对象
"""
try:
start = datetime.fromisoformat(start_date) if start_date else None
end = datetime.fromisoformat(end_date) if end_date else None
if start and end and start > end:
raise ValueError('起始日期不能晚于结束日期')
return start, end
except ValueError as e:
raise APIResponse.error('日期格式错误', 400)
def validate_id_list(ids):
"""验证ID列表参数[^3]
参数:
ids (list): ID列表
返回:
list: 验证后的ID列表
"""
if not ids or not isinstance(ids, list):
raise APIResponse.error('参数错误', 400)
try:
return [int(id) for id in ids]
except ValueError:
raise APIResponse.error('ID格式错误', 400)