赞
踩
容联云地址:容联云通讯_短信平台、手机验证码、语音验证码、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准备")
- client = redis.Redis(db=2)
- redis_code = client.get("sms_%s" % phone)
- 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承接
-
- <input type="text" v-model="phone">
- <button @click="sendcode">{{msgButton}}</button>
-
- 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)
- })
- },
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。