我正在尝试将 Twilio 广播短信功能添加到我的 Django 应用程序,但无法弄清楚如何检索所有数据库电话号码



我在我的Django应用程序中创建了一个'Post'模型,它将一篇基本文章上传到数据库。我正试图实现一个功能,通知用户,一个新的文章已通过短信上传,但这需要被发送到所有用户谁已经在数据库中注册了他们的号码(保存在一个单独的"配置文件"模型)。

我在模型中添加了一个"保存"功能,当帖子上传时发送短信:

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):
account_sid = settings.TWILIO_ACCOUNT_SID 
auth_token = settings.TWILIO_AUTH_TOKEN 
user_numbers = ''
client = Client(account_sid, auth_token)
message = client.messages.create(
body= 'Hello, a new article is available from your 
dashboard.',
from_= settings.TWILIO_NUMBER,
to = user_numbers         
)
print(message.sid)
return super().save(*args, **kwargs)

我已经使API工作与一个数字,硬编码在应用程序中,但现在想从数据库中绘制数字,并将它们发送给所有用户谁已经注册了他们的手机号码。

我已经尝试使用Profile.objects.get(phone_numbers),但这不起作用。查看Twilio文档,我注意到我需要将settings.py中的数字保存为数组,并更改"save"函数中的代码以运行for循环,遍历数组中的所有数字,并使用settings将其分配给"user_numbers"变量。USER_NUMBERS(例如)。然而,我对Python和Django非常陌生,不知道如何做到这一点。

为什么Twilio的例子:

def broadcast_sms(request):
message_to_broadcast = ("Have you played the incredible TwilioQuest "
"yet? Grab it here: https://www.twilio.com/quest")
client = Client(settings.TWILIO_ACCOUNT_SID, settings.TWILIO_AUTH_TOKEN)
for recipient in settings.SMS_BROADCAST_TO_NUMBERS:
if recipient:
client.messages.create(to=recipient,
from_=settings.TWILIO_NUMBER,
body=message_to_broadcast)
return HttpResponse("messages sent!", 200)

任何帮助都将是非常感激的。

我读过的一些相关文档包括:

Twillio - Broadcast SMS Text Messages from Python

一个API调用发送消息给多人

您没有提供您的模型,所以我将假设您有一个带有phone_number字段的Profile模型。在Post类中使用这个保存方法:

def save(self, *args, **kwargs):
if not self.pk: # Only if the instance is being created the code is executed
phone_numbers = [profile.phone_number for profile in Profile.objects.all()]
account_sid = settings.TWILIO_ACCOUNT_SID 
auth_token = settings.TWILIO_AUTH_TOKEN
client = Client(account_sid, auth_token)

for phone_number in phone_numbers:
if phone_number:
message = client.messages.create(body='Hello, a new article is available from your dashboard.', from=settings.TWILIO_NUMBER, to=phone_number)
super().save(*args, **kwargs)

相关内容

最新更新