You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何将重复的用户通知代码封装为可传参的helper函数优化

实现思路

核心是把两类用户通用的「遍历用户→生成消息→发短信→发邮件」逻辑抽离出来,把差异化的消息生成规则作为参数传入即可,完全可以实现你要的两次调用完成所有逻辑的效果。


具体代码实现

1. 先定义基础模板和消息生成规则

# 原有基础消息模板直接保留
base_msg = "Hello %s, %s. \n \n***To change your password, press CTRL + ALT + DEL and select change password***.\n\n\n- MY COMPANY IT"

# 定义两类用户的消息生成逻辑
notify_msg = lambda user: base_msg % (user['Name'], f"you have {user['Days']} days left to reset your password.")
expired_msg = lambda user: base_msg % (user['Name'], "your password has expired, please change it asap to avoid any issues that could occur with your account")

2. 封装通用notify helper函数

import requests
from twilio.rest import Client

# 提前定义好配置常量即可
twilio_account_sid = "你的twilio账户SID"
twilio_auth_token = "你的twilio授权token"
twilio_from_phone_number = "你的twilio发信号码"
mailgun_api = "你的mailgun接口密钥"

def notify(user_list, msg_generator):
    # 初始化twilio客户端,单次调用仅初始化一次
    client = Client(twilio_account_sid, twilio_auth_token)
    mailgun_api_url = "https://api.mailgun.net/v3/MYDOMAIN/messages"
    
    for user in user_list:
        # 按传入的规则生成对应消息
        full_msg = msg_generator(user)
        
        # 发送短信
        message = client.messages.create(
            to=user['Number'],
            from_=twilio_from_phone_number,
            body=full_msg
        )
        print(message.sid)
        
        # 发送邮件,这里修正了你原代码对self.app.config.get的错误使用:config.get是用来读取配置项的,不要套在请求参数上
        requests.post(
            mailgun_api_url,
            auth=("api", mailgun_api),
            data={
                "from": "IT <mailgun@MYDOMAIN>",
                "to": user['Email'],
                "subject": "Password Reminder",
                "text": full_msg
            }
        )

3. 按你需要的形式调用

# 发送待过期用户通知
notify(notify_users, notify_msg)
# 发送已过期用户通知
notify(expired_users, expired_msg)

可选优化建议

  • 可以在发送逻辑中增加try-except异常捕获,避免单个用户发送失败导致整个任务中断,也可以按需添加失败重试逻辑
  • 如果通知任务触发频率高,可以把twilio客户端的初始化提到函数外部,避免重复创建实例浪费资源
  • 可以给函数增加返回值,返回发送成功/失败的用户列表,方便后续统计对账

内容的提问来源于stack exchange,提问作者troy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 03:15:04