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

如何在Django应用中集成Twilio实现新文章发布时给注册用户群发短信

实现方案

核心修改说明

  1. 修正原代码的缩进错误:__str__、get_absolute_url、save方法需要缩进为Post类的成员方法
  2. 新增新建文章判断逻辑,仅首次创建文章时触发短信发送,避免后续更新文章重复推送
  3. 从Profile表过滤出所有已登记有效手机号的用户,遍历调用Twilio接口完成群发
  4. 新增异常捕获逻辑,避免单个号码发送失败中断整个群发流程

修改后完整代码

from django.db import models
from django.urls import reverse
from django.conf import settings
from twilio.rest import Client
# 替换为你实际Profile模型的导入路径
from .models import Profile

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    detail_text = models.TextField(default='')

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('post-detail', kwargs={'pk': self.pk})

    def save(self, *args, **kwargs):
        # 判断是否为首次新建的文章
        is_new_post = self.pk is None
        # 先执行文章保存,确保入库成功后再发短信
        super().save(*args, **kwargs)
        
        if is_new_post:
            account_sid = settings.TWILIO_ACCOUNT_SID 
            auth_token = settings.TWILIO_AUTH_TOKEN 
            client = Client(account_sid, auth_token)
            # 过滤出所有持有有效手机号的用户,替换phone为你Profile模型里的实际手机号字段名
            valid_numbers = Profile.objects.exclude(phone__isnull=True).exclude(phone__exact='').values_list('phone', flat=True)
            
            sms_content = f'Hello, 新文章《{self.title}》已上线,可前往dashboard查看。'
            for recipient in valid_numbers:
                if not recipient:
                    continue
                try:
                    message = client.messages.create(
                        body=sms_content,
                        from_=settings.TWILIO_NUMBER,
                        to=recipient         
                    )
                    print(f"发送成功,SID:{message.sid},接收号码:{recipient}")
                except Exception as e:
                    print(f"发送失败,接收号码:{recipient},错误信息:{str(e)}")

注意事项

  • 代码中的phone字段需要替换为你Profile模型里实际存储手机号的字段名
  • 所有手机号需要符合Twilio格式要求,必须携带国家码,例如中国手机号格式为+8613xxxxxxxxx
  • 如果用户量较大,直接在save方法里循环发送短信会阻塞文章保存请求,建议后续引入Celery等异步任务框架处理短信发送逻辑
  • 注意遵守Twilio的发送频率限制,避免触发平台限流

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:00:04