要增加生成激活码的有效期参数,我们可以在用户模型中扩展regenerate_activation_code方法,使其接受有效期作为参数,并根据该有效期计算激活码的过期时间。以下是如何修改User模型以支持这一功能的示例代码:
首先,你需要确定如何表示有效期。在这里,我将使用Python的timedelta来处理有效期,并将其存储为UTC时间戳。我们假设有效期是从生成激活码的那一刻起算的。
from datetime import timedelta
class User(db.Model):
# ... 其他字段 ...
activation_code_expiry = db.Column(db.DateTime, nullable=True) # 增加激活码过期时间字段
def regenerate_activation_code(self, validity_period="1 day"):
"""
生成新的激活码并设置其有效期。
:param validity_period: 有效期字符串,如"1 day", "7 days", "1 month", "1 year"等,默认为1天。
"""
validity_delta = timedelta(days=int(validity_period.split()[0]))
validity_type = validity_period.split()[1]
if validity_type == "day" or validity_type == "days":
pass # 默认处理已经是按天计算,无需转换
elif validity_type == "month":
validity_delta *= 30 # 简单估算,每个月按30天计算
elif validity_type == "year":
validity_delta *= 365 # 每年按365天计算
self.activation_code = secrets.token_hex(16)
self.activation_code_gen_time = datetime.utcnow()
self.activation_code_expiry = datetime.utcnow() + validity_delta
db.session.commit()
在这个修改后的regenerate_activation_code方法中,我们接受一个字符串形式的有效期参数(如"1 day"、"7 days"、"1 month"或"1 year"),然后解析这个字符串以确定有效期的长度和单位。注意,这里的月和年是简单估算的,实际应用中可能需要更精确的日期处理逻辑。
接下来,在发送新激活码的邮件时,你也可以在邮件正文中包含激活码的有效期信息,以便用户了解他们需要在多长时间内使用该激活码。
请记得根据你的实际数据库模型和需求调整上述代码,特别是有效期字段的处理方式和时间单位的转换逻辑。
当前文章价值0.71元,扫一扫支付后添加微信提供帮助!(如不能解决您的问题,可以申请退款)

评论已关闭!