当前位置:   article > 正文

python 发送短信验证码_python发送短信验证码

python发送短信验证码

容联云地址:容联云通讯_短信平台、手机验证码、语音验证码、IM即时通讯、云呼叫系统等互联网通信服务

注册荣联云账号并获取accId,accToken,appId

定义发送短信方法

思路:随机数模块生成六位数验证码,存在redis中,以便校验时使用

  1. # 插入荣联云创建的插件
  2. from ronglian_sms_sdk import SmsSDK
  3. # 导入随机数模块用来生成验证码
  4. import random
  5. # 导入获取的荣联云的信息
  6. import redis
  7. import json
  8. accId="8aaf07087de13e49017d***********"
  9. accToken="419de3ed61444161ac**********"
  10. appId ="8aaf07087de13e49017***********"
  11. # 定义方法
  12. def send_message(mobile):
  13. # 按照插件需要参数定义自己的
  14. sdk = SmsSDK(accId,accToken,appId)
  15. # 短信类型,荣联云中获取
  16. tid ="1"
  17. # mobile = "134********"
  18. # 生成验证码
  19. data = random.randint(100000,999999)
  20. # 创建redis客户端(存2号数据库,有密码需要添加密码)
  21. redis_cli = redis.Redis(db=2)
  22. # 短信验证码写入redis,有效时间三分钟
  23. redis_cli.setex("sms_%s"%mobile,60*3,data)
  24. # 根据需求传参,通常为验证码,过期时间,中间逗号隔开
  25. datas=(data,2)
  26. # 也可以自己定义验证码,字符串形式
  27. # datas=("山人本无忧","因雪白了头")
  28. # 传参:短信类型,手机号,短信验证码等参数
  29. resp = sdk.sendMessage(tid,mobile,datas)
  30. dataes =json.loads(resp)
  31. print(dataes)
  32. return dataes
  33. # 调用方法
  34. # send_message()

调用方法

  1. # 发送短信验证码
  2. class Get_msgcode(APIView):
  3. def get(self,request):
  4. phone = request.query_params.get("phone")
  5. print(">>>>>",phone)
  6. resp = send_message(phone)
  7. # 因未开通发送功能,只能测试使用,绑定三个手机号可以正常发送,其他会返回报错码,所以默认返回以下报错码的都为发送成功
  8. if resp["statusCode"] == "000000" or resp["statusCode"] == "112310" or resp["statusCode"] == "172001" :
  9. return Response({'msg': "发送短信验证码成功", "code": 200})
  10. else:
  11. return Response({'msg': "发送短信验证码失败", "code": 400})

注册时检验短信验证码

Django项目中使用

  1. #注册账号
  2. class Register(APIView):
  3. def post(self,request):
  4. username = request.data.get("username")
  5. phone = request.data.get("phone")
  6. password = request.data.get("password")
  7. code = request.data.get("code")
  8. print(">>>>>>>>>>>>>",username,phone,password,code)
  9. if not all([username,phone,password,code]):
  10. return Response({"msg":"用户信息不全","code":400})
  11. username_num = User.objects.filter(username=username).count()
  12. phone_num = User.objects.filter(phone=phone).count()
  13. if username_num != 0:
  14. return Response({"msg": "该用户名已注册", "code": 400})
  15. if phone_num != 0:
  16. return Response({"msg": "该用手机号已注册", "code": 400})
  17. # 短信验证码
  18. print(">><><><redis准备")
  19. client = redis.Redis(db=2)
  20. redis_code = client.get("sms_%s" % phone)
  21. print(">>>",redis_code,type(redis_code))
  22. if not redis_code:
  23. return Response({"msg":"验证码过期","code":400})
  24. sms_code = str(redis_code,encoding="utf-8")
  25. print("》》》》",code,sms_code)
  26. if sms_code != code:
  27. return Response({"msg":"验证码错误","code":400})
  28. user =User.objects.create_user(username=username,phone=phone,password=password)
  29. user.save()
  30. return Response({"msg":"注册成功","code":200})

前端vue实现倒计时

思路:发送按钮定义为一个变量,当方法被触发时,变量变为60,并依次递减

  1. // 定义手机号text文本框和发送按钮
  2. // 按钮里的内容用字段msgButton承接
  3. <input type="text" v-model="phone">
  4. <button @click="sendcode">{{msgButton}}</button>
  5. data(){
  6. return{
  7. phone:"",
  8. msgButton:"发送验证码"
  9. }
  10. },
  11. # 发送的方法
  12. methods:{
  13. // 发送短信验证码
  14. sendcode: function() {
  15. // 1、验证手机号是否为空
  16. if (!this.phone) {
  17. this.message = "手机号不能为空";
  18. this.$Message(this.message);
  19. return false;
  20. }
  21. // 2、正则验证手机号格式
  22. var reg = new RegExp(/^[1][34578][0-9]{9}$/);
  23. if (!reg.test(this.phone)) //检测字符串是否符合正则表达式
  24. {
  25. this.message = "手机号格式不正确";
  26. this.$Message(this.message)
  27. }
  28. // 3、将用户短信发送
  29. var data = {phone:this.phone}
  30. send_phone_code_post(data).then((res) => {
  31. if (res.code == 200) {
  32. # 定义一个变量计时,并把他传给msgBu
  33. let t = 60;
  34. let si = setInterval(() => {
  35. this.msgButton = t;
  36. t = t - 1;
  37. if (t == 0) {
  38. this.is_send = false;
  39. this.msgButton = "获取手机验证码";
  40. clearInterval(si);
  41. }
  42. }, 1000);
  43. } else {
  44. alert(res.msg)
  45. }
  46. }).catch((err) => {
  47. console.log(err)
  48. })
  49. },
  50. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/493815?site
推荐阅读
相关标签
  

闽ICP备14008679号