django+celery使用阿里云短信服务异步发送注册验证码

网站注册时通常都会使用短信验证码,以防止机器恶意注册网站,阿里云短信服务是国内较大的短信服务平台,使用阿里云短信服务实现验证码发送也是非常的简单,相关文档:https://helpcdn.aliyun.com/document_detail/59210.html,python发送短信验证码文档:
https://help.aliyun.com/document_detail/55491.html
按照文档,我们需要注册阿里云账号,进入控制台,创建AccessKey:
在这里插入图片描述
在这里插入图片描述
然后添加签名和模版,签名和模板是需要审核的,一般2个小时左右。
python发送短信验证码需要传递几个参数:
在这里插入图片描述
在这里插入图片描述
同时需要返回几个值:
在这里插入图片描述
下载SDK并解压,在解压目录中进入项目开发所需的虚拟环境,执行:python setup.py install
在这里插入图片描述
解压目录中的demo_sms_send.py文件中为我们提供了发送短信的demo程序,我们只需要将demo中的代码稍作修改放到django项目中就可以实现短信验证发送的功能了。
第一步:将aliyunsdkdysmsapi包复制到项目中,因为功能的实现依赖这个包:
因为是异步发送短信,所以将其放在Celery_tasks文件下,方便导入
在这里插入图片描述
第二步:在settings.py中配置ACCESS_KEY_ID和ACCESS_KEY_SECRET,即在阿里云控制台创建AccessKey时生成的AccessKey ID和Access Key Secret:
在这里插入图片描述
第三步:在tasks.py文件中编写短信验证码发送功能:
使用celery需要配置,具体请访问:https://blog.csdn.net/weixin_44951273/article/details/100525958,定时任务和异步任务相同,只需要把settings中的CELERYBEAT_SCHEDULE注释掉即可。

from celery import Celery
import os
import django
from .aliyunsdkdysmsapi.request.v20170525 import SendSmsRequest
from aliyunsdkcore.client import AcsClient
import uuid
from aliyunsdkcore.profile import region_provider
from django.conf import settings
import random
import json
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'frenshshop.settings')
django.setup()
app = Celery("Celery_tasks.tasks",broker=settings.BROKER_URL)

# 注意:不要更改
REGION = "cn-hangzhou"
PRODUCT_NAME = "Dysmsapi"
DOMAIN = "dysmsapi.aliyuncs.com"

acs_client = AcsClient(settings.ACCESS_KEY_ID, settings.ACCESS_KEY_SECRET, REGION)
region_provider.add_endpoint(PRODUCT_NAME, REGION, DOMAIN)

@app.task
def register_active_sms_task(phone):
    smsRequest = SendSmsRequest.SendSmsRequest()
    code = random.randrange(1000, 9999)  # 随机生成四位数验证码
    smsRequest.set_TemplateCode("SMS_174690097")  # 申请的短信模板编码,必填
    smsRequest.set_TemplateParam(json.dumps({"code":code}))  # 设置短信模板中的code值,即短信验证码
    smsRequest.set_OutId(uuid.uuid1())  # 设置业务请求流水号,必填
    smsRequest.set_SignName("天天生鲜")  # 短信签名
    smsRequest.set_PhoneNumbers(phone)  # 短信发送的号码列表,必填
    smsResponse = acs_client.do_action_with_exception(smsRequest)  # 调用短信发送接口,返回json
    print(smsResponse)

第四步:编写视图函数,调用异步函数:

def send_phone(request):
    phone = request.POST.get("phone")
    register_active_sms_task.delay(phone) # 调用异步函数实现短信验证码发送,传递phone参数
    return JsonResponse({"code":200,"message":"发送成功","data":{}})

第五步:启动项目、redis、django-celery:

python manage.py runserver # 启动项目
python manage.py celery worker -l info # 启动celery worker,处理任务
python manage.py celery beat -l info # 启动celery beat,负责把任务分发给worker
# 为了方便测试,也可以同时启动worker和beat,但此方法windows,只能分别启动。linux可行。
python manage.py celery worker -B -l info

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此时点击前端发送按钮后台接收到手机号码就可以进行短信验证码发送了:
在这里插入图片描述
可以看到短信已“成功”发送,打印的smsResponse中有三个参数,code参数的值为:isv.AMOUNT_NOT_ENOUGH,意思是账户余额不足,因为我们有充钱,别问我为什么,问就是因为穷,但发送短信验证码的大体思路就是这样。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django Celery 是一个用于 Django 框架的分布式任务队列工具。它结合了 Django 的 Web 开发能力和 Celery异步任务处理能力。通过使用 Celery,你可以将耗时的任务(如发送电子邮件、处理图像、执行定时任务等)从主线程中分离出来,以提高应用的性能和响应速度。 你可以通过以下步骤来集成 DjangoCelery: 1. 安装 Celery:在命令行中使用 pip 安装 Celery 库:`pip install celery` 2. 配置 Celery:在 Django 项目的 settings.py 文件中配置 Celery 相关的设置,主要包括消息代理器(message broker)的设置和任务结果存储的设置。 3. 创建任务:在 Django 项目中创建需要异步执行的任务。任务是一个 Python 函数,使用 `@task` 装饰器进行标记。 4. 启动 Celery Worker:在命令行中使用 `celery -A your_project_name worker --loglevel=info` 启动 Celery Worker,该命令会监听并执行任务队列中的任务。 5. 触发任务:在你的 Django 代码中调用任务函数,可以使用 `your_task.delay()` 来触发异步执行任务。 这样,当你触发任务时,它会被添加到 Celery 的任务队列中,并由 Celery Worker 异步执行。执行结果可以存储在指定的结果存储中,也可以通过回调函数获取。 注意:配置消息代理器和结果存储器时,你可以选择使用不同的后端,如 RabbitMQ、Redis、Amazon SQS 等。 以上是关于 Django Celery 的简要介绍和基本使用步骤,如果你有具体问题或需要更详细的指导,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值