celery,分布式异步任务队列
eventlet,并发网络库 gevent 协程库
ronglian_sms_sdk 容联云封装的方法
pip install celery==4.4.7
pip install eventlet==0.26.1
pip install ronglian-sms-sdk
celery启动命令
celery -A 项目名 worker -l info -P eventlet
1.配置Celery
在项目同名文件夹下创建celery.py 文件
from celery import Celery
import os
from django.conf import settings
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'p6_421.settings')
app = Celery('myworker')
app.conf.broker_url = 'redis://:@127.0.0.1:6379/5'
app.conf.result_backend = 'redis://:@127.0.0.1:6379/6'
app.autodiscover_tasks(settings.INSTALLED_APPS)
2.创建任务文件
App users文件夹下创建tasks.py 文件 Task任务
文件内存放要异步处理的任务
1. 配置容联云 settings.py
accId = ‘容联云通讯分配的主账号ID’
accToken = ‘容联云通讯分配的主账号TOKEN’
appId = ‘容联云通讯分配的应用ID’
settings.py文件配置
ACCID = '8a216da8804ba8a50180x64a39933069b'
ACCTOKEN = '09880a5e3fc94x046b3cc147e240ad169'
APPID = '8a216dax8804ba8a5018064a39a3706a2'
2. 使用SmsSDK发送短信
在App users文件夹下的tasks.py 文件里编写
tasks.py文件
from ronglian_sms_sdk import SmsSDK
from p6_421 import settings
from p6_421.celery import app
@app.task
def send_message(sms_code, mobile, expire=5):
sdk = SmsSDK(settings.ACCID, settings.ACCTOKEN, settings.APPID)
tid = '1'
mobile = "%s" % mobile
datas = ("%s" % sms_code, "%s" % expire)
res = sdk.sendMessage(tid=tid, mobile=mobile, datas=datas)
return res
1.发送短信验证码
class SmsView(APIView):
def post(self, request):
mobile = request.data.get('mobile')
uuid_ = request.data.get('uuid')
sms_code = '%d' % random.randint(10000, 99999)
redis_cli = redis.Redis()
redis_cli.set(uuid_, sms_code, ex=300)
res = send_message.delay(sms_code, mobile)
return Response({'code': 200, 'msg': '短信已发送,注意查收!'})
2.验证短信验证码(根据前端要求)
class CheckSmsView(APIView):
def post(self, request):
sms_code = request.data.get('sms_code')
uuid_ = request.data.get('code_id')
redis_cli = redis.Redis()
stored_sms_code = redis_cli.get(uuid_)
if stored_sms_code and stored_sms_code.decode() == sms_code:
return Response({'code': 200, 'msg': '对比成功'})
else:
return Response({'code': 400, 'error': '对比失败'})
3.先启动django项目 然后另开终端启动celery 服务
celery -A (celery配置文件路径) worker -l info -P eventlet
例:
celery -A learnproject.utils.celery.celery_main worker -l info
-P eventlet
learnproject.utils.celery.celery_main
learnproject 项目的同名文件夹
utils 同名文件夹下的文件夹
celery 同名文件夹下的文件夹
celery_main 配置celery主要信息的py文件
Original: https://blog.csdn.net/weixin_69282446/article/details/124455292
Author: :D…
Title: 使用容联云Celery异步发送短信验证码
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/734945/
转载文章受原作者版权保护。转载请注明原作者出处!