一个用于通过可交换后端发送短信的Django应用。
项目描述
Django SMS
django-sms是一个用于通过可交换后端发送短信的Django应用。该模块主要基于并按照与django.core.mail
模块相同的方式进行构建。
发送短信
这些包装器提供用于在开发期间快速发送短信、帮助测试短信发送以及提供额外的短信网关。
快速示例
两行代码即可
from sms import send_sms
send_sms(
'Here is the message',
'+12065550100',
['+441134960000'],
fail_silently=False
)
使用配置的其中一个短信后端发送文本消息。
send_sms()
send_sms(body, originator, recipients, fail_silently=False, connection=None)
在大多数情况下,您可以使用sms.send_sms()发送文本消息。
message、originator和recipients参数是必需的。
- message:一个字符串。
- originator:一个字符串。如果为None,django-sms将使用DEFAULT_FROM_SMS设置。
- 收件人:一个字符串列表,每个字符串都是一个电话号码。
- fail_silently:一个布尔值。当其值为 False 时,如果 send_sms() 发生错误,将抛出异常。有关可能抛出的异常列表,请参阅 SMS 后端 文档。
- connection:用于发送短信的可选 SMS 后端。如果没有指定,将使用默认后端的实例。有关详细信息,请参阅 SMS 后端 文档。
返回值将是成功发送的短信数量。
示例
这将向 +44 113 496 0000 和 +44 113 496 0999 发送短信。
send_sms(
'Here is the message',
'+12065550100',
['+441134960000', '+441134960999']
)
消息类
django-sms 的 send_sms() 函数实际上是一个薄包装器,它利用了 Message 类。
尽管 send_sms() 和相关包装函数可以访问 Message 类的一些功能,但并非所有功能都可以使用。如果您希望使用高级功能,您需要直接创建 Message 实例。
注意:这是一个设计特性。最初,send_sms() 是 django-sms 提供的唯一接口。
Message 负责创建短信本身。然后 SMS 后端负责发送 SMS。
为了方便起见,Message* 提供了一个 send() 方法用于发送单个短信。如果您需要发送多个短信,SMS 后端 API 提供了其他选择。
消息对象
类 Message
Message 类使用以下参数初始化(如果使用位置参数,按给定顺序)。所有参数都是可选的,可以在调用 send() 方法之前设置。
- body:正文。这应该是一条纯文本消息。
- originator:短信的发送者。
- recipients:收件人电话号码的列表或元组。
- connection:SMS 后端实例。如果您想为多个短信使用相同的连接,请使用此参数。如果省略,则在调用 send() 时创建一个新的连接。
例如
from sms import Message
message = Message(
'Here is the message',
'+12065550100',
['+441134960000']
)
该类有以下方法
- send(fail_silently=False):发送短信。如果构造短信时指定了连接,则将使用该连接。否则,将实例化默认后端并使用。如果关键字参数 fail_silently 为 True,则在发送短信时抛出的异常将被压制。收件人列表为空不会抛出异常。
短信后端
实际的短信发送由 SMS 后端处理。
SMS 后端类有以下方法
- open():实例化一个长寿命的 SMS 发送连接。
- close():关闭当前的 SMS 发送连接。
它还可以用作上下文管理器,它将根据需要自动调用 open() 和 close()。
import sms
with sms.get_connection() as connection:
sms.Message(
'Here is the message', '+12065550100', ['+441134960000'],
connection=connection
).send()
sms.Message(
'Here is the message', '+12065550100', ['+441134960000'],
connection=connection
).send()
获取短信后端实例
sms.get_connection() 函数在 sms 中返回您可以使用的一个 SMS 后端实例。
get_connection(backend=None, fail_silently=False, *args, **kwargs)
默认情况下,调用 get_connection() 将返回在 SMS_BACKEND 中指定的 SMS 后端的实例。如果您指定了 backend 参数,将实例化该后端。
fail_silently 参数控制后端如何处理错误。如果 fail_silently 为 True,则短信发送过程中的异常将被静默忽略。
所有其他参数都直接传递给 SMS 后端的构造函数。
django-sms 随带提供了一些 SMS 发送后端。其中一些后端仅在测试和开发期间有用。如果您有特殊的 SMS 发送需求,您可以 编写自己的 SMS 后端。
控制台后端
控制台后端不是发送真正的短信,而是将本应发送到标准输出的文本消息写入。默认情况下,控制台后端写入 stdout。在构造连接时,您可以通过提供 stream 关键字参数来使用不同的类似流的对象。
SMS_BACKEND = 'sms.backends.console.SmsBackend'
此后端不适合在生产环境中使用 - 它仅作为开发中的便利工具提供。
文件后端
文件后端将文本消息写入文件。每次在此后端打开会话时,都会创建一个新文件。文件写入的目录是从 SMS_FILE_PATH 设置中获取的,或者是在使用 get_connection() 创建连接时通过 file_path 关键字参数指定的。
要指定此后端,请将以下内容放入您的设置中
SMS_BACKEND = 'sms.backends.filebased.SmsBackend'
SMS_FILE_PATH = '/tmp/app-messages' # change this to a proper location
此后端不适合在生产环境中使用 - 它仅作为开发中的便利工具提供。
内存后端
'locmen' 后端将文本消息存储在 sms 模块的特定属性中。当发送第一条消息时,会创建 outbox 属性。它是一个包含每个要发送的文本消息的 Message 实例的列表。
要指定此后端,请将以下内容放入您的设置中
SMS_BACKEND = 'sms.backends.locmem.SmsBackend'
此后端不适合在生产环境中使用 - 它仅作为开发中的便利工具提供。
虚拟后端
如名称所示,模拟后端对您的文本消息不做任何操作。要指定此后端,请将以下内容放入您的设置中
SMS_BACKEND = 'sms.backends.dummy.SmsBackend'
此后端不适合在生产环境中使用 - 它仅作为开发中的便利工具提供。
MessageBird后端
MessageBird 后端使用 MessageBird SMS API 发送文本消息。要指定此后端,请将以下内容放入您的设置中
SMS_BACKEND = 'sms.backends.messagebird.SmsBackend'
MESSAGEBIRD_ACCESS_KEY = 'live_redacted-messagebird-access-key'
通过运行以下命令确保已安装 MessageBird Python SDK
pip install "django-sms[messagebird]"
Twilio后端
Twilio 后端使用 Twilio SMS API 发送文本消息。要指定此后端,请将以下内容放入您的设置中
SMS_BACKEND = 'sms.backends.twilio.SmsBackend'
TWILIO_ACCOUNT_SID = 'live_redacted-twilio-account-sid'
TWILIO_AUTH_TOKEN = 'live_redacted-twilio-auth-token'
通过运行以下命令确保已安装 Twilio Python SDK
pip install "django-sms[twilio]"
定义自定义短信后端
如果您需要更改发送文本消息的方式,可以编写自己的 SMS 后端。然后,您的设置文件中的 SMS_BACKEND 设置就是您后端类的 Python 导入路径。
自定义 SMS 后端应继承位于 sms.backends.base 模块中的 BaseSmsBackend。自定义 SMS 后端必须实现 send_messages(messages) 方法。此方法接收一个包含 Message 实例的列表,并返回成功投递的消息数量。如果您的后端有任何持久会话或连接的概念,您还应实现 open() 和 close() 方法。请参考现有的 SMS 后端以获取参考实现。
信号
django-sms 提供了一组内置信号,允许用户代码通过 Django 本身通知某些操作。这包括一些有用的通知
sms.signals.post_send
在调用 Message 实例的 send() 后发送。此信号发送的参数
- sender:Message 类。
- instance:正在发送的实际 Message 实例。
确认
此项目基于 django.core.mail 模块,并由 Roald Nefs 进行修改。django-sms 包含 Django 许可证。
变更日志
以下记录了 django-sms 中所有显著更改。
未发布
0.7.0
更改
- 添加对 Django 4.2 和 5.0 的支持。
- 添加对 Python 3.12 的支持。
弃用
- 放弃对 Django 2.2、3.1 和 4.0 的支持。
- 放弃对 Python 3.6 和 3.7 的支持。
0.6.0
更改
- 添加对 Django 3.2、4.0 和 4.1 的支持。
- 添加对 Python 3.11 的支持。
弃用
- 放弃对 Django 3.0 的支持。
0.5.0
新增
0.4.0
新增
- 使用 messagebird.com 发送短信的 sms.backends.messagebird.SmsBackend 后端 (#6)。
更改
- 简化了 sms.signals.post_send 信号的属性,包含发起的 Message 实例,而不是所有属性 (#11)。
0.3.0 (2021-01-30)
新增
- sms.signals.post_send 信号允许用户代码在调用 Message 实例的 send() 方法后由 Django 本身通知。
0.2.0 (2021-01-21)
新增
- 将文本消息写入文件的文件后端 (#1)。
0.1.0 (2021-01-15)
新增
- 使此
CHANGELOG.md
文件能够列出 django-sms 的每个版本的显著更改。
项目详情
下载文件
下载您平台的文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。