刨析django---短信验证码

前端页面

在这里插入图片描述

前端异步请求

输入手机号,点击‘免费获取验证码’,发送异步请求

//发送短信
function send_sms(){
    var phone = $("#phone").val();
    var csrftoken = $("input[name='csrfmiddlewaretoken']").val();
    var data = {
        "phone":phone,
        "csrfmiddlewaretoken":csrftoken,//手动加入页面中的密钥,防止403
    }
    //console.log(data);

    //异步请求,让服务端发送短信
    $.ajax({
        url:"/index/",
        type:"post",
        data:data,  //服务端request.POST获取数据,
        dataType:"json",
        success:function(res){
            if(res.code == 200){
                alert(res.data);
            }else{
                alert(res.error);
            }
        },
        error:function(res){
        	alert(res);
        },
    })
}

后端处理请求

def show_index(request):
    if request.method == "GET":
        return render(request,"index.html")

    elif request.method == "POST":
        # 查看前端提交的数据
        data = request.POST  #QueryDict
        print("frontend data:",data)
        #获取数据
        phone = request.POST.get("phone")
        csrftoken = request.POST.get("csrfmiddlewaretoken")#中间件已经验证通过,视图还可以继续验证

        #发送短信
        try:
            send_sms = SendSms()

        except:
            pass
        #返回响应
        data = {"code":200,"data":"短信发送成功,请注意查收!"}
        return JsonResponse(data)

请求第三方发送短信

容联云官网
短信接入

使用方式

  1. 访问短信接入,点击‘立即接入’
  2. 注册用户
  3. 登录–管理控制台首页—查看自己的id等信息
    默认提供一定数量的测试短信
    在这里插入图片描述
  4. 点击 ‘开发文档’,选择 ‘短信开发手册’
    学习绑定测试手机号及请求的方法
    在这里插入图片描述
    云通讯返回的验证码与用户输入的验证码一致,则验证通过

具体使用

通过程序:
1.构造完整的url
2.构造headers
3.构造请求体
通过requests发送请求
res = requests.post(url,headers=headers,data = json.dumps)
在这里插入图片描述

#账户信息
accountSid = "你的账户Sid"
accountToken = "你的账户口令"
appId = "你的appId"
templateId = "1"

import hashlib
import time
import random
from datetime import datetime
from base64 import b64encode
import json
import requests

class SendSms(object):
    base_url = 'https://app.cloopen.com:8883'
    def __init__(self):
        pass

    def get_sig_params(self):
    	"""生成加密数据"""

        self.ts = datetime.now().strftime("%Y%m%d%H%M%S")
        s = accountSid + accountToken + self.ts

        m = hashlib.md5()
        m.update(s.encode())

        return m.hexdigest().upper()


    def get_full_url(self):
    	"""获取完整的url"""

        #generate sig
        sig = self.get_sig_params()

        #vary_url
        vary_url = "/2013-12-26/Accounts/{}/SMS/TemplateSMS?sig={}".format(accountSid,sig)

        self.url = self.base_url + vary_url

    def get_headers(self):
    	"""构造请求头"""
        s = accountSid + ":" + self.ts
        auth_ = b64encode(s.encode())
        self.headers = {
            "Accept":"application/json",
            "Content-Type":"application/json;charset=utf-8;",
            "Authorization":auth_,
        }

    def get_data(self,phone,code,time_long):
		"""
		构造请求体
		"""
        self.data = {
            "to":phone,
            "appId":appId,
            "templateId":templateId,
            "datas":[code,time_long],
        }

    def send_sms(self,phone,code,time_long):
        self.get_full_url()
        self.get_headers()
        self.get_data(phone,code,time_long)

        res = requests.post(self.url,headers=self.headers,data=json.dumps(self.data))

        if res.status_code == 200:
            print("响应OK")
            print()

        else:
            print("响应失败")

if __name__ == "__main__":
    send_sms = SendSms()
    send_sms.send_sms("你的测试手机号","验证码","5")

完整代码

链接:完整代码
提取码:57pd

 
 
上一页:刨析django—csrf     刨析django----登录与会话保持

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

laufing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值