栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python 发送短信验证码

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python 发送短信验证码

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

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

定义发送短信方法

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

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

# 调用方法
# send_message()

调用方法

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

注册时检验短信验证码

Django项目中使用

#注册账号
class Register(APIView):
    def post(self,request):
        username = request.data.get("username")
        phone = request.data.get("phone")
        password = request.data.get("password")
        code = request.data.get("code")
        print(">>>>>>>>>>>>>",username,phone,password,code)
        if not all([username,phone,password,code]):
            return Response({"msg":"用户信息不全","code":400})
        username_num = User.objects.filter(username=username).count()
        phone_num = User.objects.filter(phone=phone).count()
        if username_num != 0:
            return Response({"msg": "该用户名已注册", "code": 400})
        if phone_num != 0:
            return Response({"msg": "该用手机号已注册", "code": 400})


        # 短信验证码
        print(">><><>>>",redis_code,type(redis_code))
        if not redis_code:
            return Response({"msg":"验证码过期","code":400})
        sms_code = str(redis_code,encoding="utf-8")
        print("》》》》",code,sms_code)
        if sms_code != code:
            return Response({"msg":"验证码错误","code":400})

        user =User.objects.create_user(username=username,phone=phone,password=password)
        user.save()
        return Response({"msg":"注册成功","code":200})

前端vue实现倒计时

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

// 定义手机号text文本框和发送按钮
// 按钮里的内容用字段msgButton承接




data(){
        return{
            phone:"",
            msgButton:"发送验证码"
        }
    },


# 发送的方法

 methods:{
      // 发送短信验证码
     
       sendcode: function() {
        // 1、验证手机号是否为空
        if (!this.phone) {
          this.message = "手机号不能为空";
          this.$Message(this.message);
          return false;
        }

        // 2、正则验证手机号格式
        var reg = new RegExp(/^[1][34578][0-9]{9}$/);
        if (!reg.test(this.phone)) //检测字符串是否符合正则表达式
        {
          this.message = "手机号格式不正确";
          this.$Message(this.message)
        }

        // 3、将用户短信发送
        var data = {phone:this.phone}
        send_phone_code_post(data).then((res) => {
          if (res.code == 200) {
            # 定义一个变量计时,并把他传给msgBu
            let t = 60;
            let si = setInterval(() => {
            this.msgButton = t;
            t = t - 1;
            if (t == 0) {
              this.is_send = false;
              this.msgButton = "获取手机验证码";
              clearInterval(si);
            }
          }, 1000);
          } else {
            alert(res.msg)
          }
        }).catch((err) => {
          console.log(err)
        })
      },
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/998100.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号