taibai_shopping/app/models/verification.py
2025-07-04 19:07:35 +08:00

62 lines
1.8 KiB
Python

from datetime import datetime, timedelta
from config.database import db
import random
import string
class EmailVerification(db.Model):
__tablename__ = 'email_verifications'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(100), nullable=False, index=True)
code = db.Column(db.String(6), nullable=False)
type = db.Column(db.SmallInteger, nullable=False) # 1-注册 2-登录 3-找回密码
is_used = db.Column(db.SmallInteger, default=0) # 0-未使用 1-已使用
expired_at = db.Column(db.DateTime, nullable=False)
created_at = db.Column(db.DateTime, default=datetime.utcnow)
@staticmethod
def generate_code():
"""生成6位数字验证码"""
return ''.join(random.choices(string.digits, k=6))
@classmethod
def create_verification(cls, email, code_type, expire_minutes=10):
"""创建验证码记录"""
code = cls.generate_code()
expired_at = datetime.utcnow() + timedelta(minutes=expire_minutes)
verification = cls(
email=email,
code=code,
type=code_type,
expired_at=expired_at
)
db.session.add(verification)
db.session.commit()
return verification
@classmethod
def verify_code(cls, email, code, code_type):
"""验证验证码"""
verification = cls.query.filter_by(
email=email,
code=code,
type=code_type,
is_used=0
).filter(
cls.expired_at > datetime.utcnow()
).first()
if verification:
verification.is_used = 1
db.session.commit()
return True
return False
def is_expired(self):
"""检查是否过期"""
return datetime.utcnow() > self.expired_at