阿里云短信服务的使用-----获取短信验证码

1、
在这里插入图片描述
在这里插入图片描述

封装发短信代码utils/MyBaseView.py

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
from code2001B.settings import
ALY_ACCESSKEY_ID,ALY_ACCESSKEY_SECRET,QINIU_ID,QINIU_SECRET,SHAZFB_APPID,SHA_R
ETURN_URL,SHA_URL
def send_sms(phone,data):
	 client = AcsClient(ALY_ACCESSKEY_ID, ALY_ACCESSKEY_SECRET, 'cn-hangzhou')
	 #data ={ "code" : 123456 }
	 request = CommonRequest()
	 request.set_accept_format('json')
	 request.set_domain('dysmsapi.aliyuncs.com')
	 request.set_method('POST')
	 request.set_protocol_type('https') # https | http
	 request.set_version('2017-05-25')
	 request.set_action_name('SendSms')
	 request.add_query_param('RegionId', "cn-hangzhou")
	 request.add_query_param('PhoneNumbers', phone)
	 request.add_query_param('SignName', "美多商城")
	 request.add_query_param('TemplateCode', "SMS_185212884")
	 request.add_query_param('TemplateParam', data)
	 response1 = client.do_action(request)
	 # python2: print(response)
	 res = json.loads(str(response1, encoding='utf-8'))

短信发送和验证的逻辑

from rest_framework.views import APIView
from rest_framework.response import Response
from libs.captcha.captcha import captcha
from django_redis import get_redis_connection
from django.http.response import HttpResponse
import random
from verificationsapp.tasks import send_sms
from django_redis import get_redis_connection
class SendSMSCode(APIView):
	 def post(self,request):
		phone = request.data.get("phone")
		image_code = request.data.get("image_code")
		image_code_uuid = request.data.get("image_code_uuid")
		print(phone)
		print(image_code_uuid)
		print(image_code)
		if not all([phone,image_code,image_code_uuid]):
		return Response({"code":4005,"msg":"参数不全"})
		#先获取redis ⾥的图⽚验证码来⽐对
		redis_cli = get_redis_connection("img_code")
		redis_img_code = redis_cli.get(image_code_uuid).decode()
		print(redis_img_code)
		print(image_code)
		if image_code.lower() != redis_img_code.lower():
		return Response({"code":4003,"msg":"参数错误"})
		#发送短信
		num = random.randint(100000,999999)
		print(num)
		send_data = {"code":10086}
		# send_sms.delay(phone,send_data)
		# 删除redis⾥的image_code,保存phone_code
		#pipeline管道:作⽤就是把多个命令放在⼀起来执⾏
		pl = redis_cli.pipeline()
		pl.setex(phone,60*5,num)
		pl.delete(image_code_uuid)
		pl.execute()
		return Response({"code":0,"msg":"发送成功"})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值