Python3版本Django实现免费手机验证码注册

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chenhua1125/article/details/80113703

Demo代码已放上GitHub,实现登录短信校验+极验验证

https://github.com/ChenJhua/TestLogin

  • 打开网站互亿无线注册一个账号,有50条免费短信
  • 这里写图片描述
  • 登录进去后会有以下页面
    这里写图片描述

  • 使用图中的APIID和APIKEY开启你的免费手机短信旅程,可以使用接口下载、接口帮助实现Django手机短信验证

  • 这里写图片描述

开始我的短信教程

1.注册页面加入两个文本框

               <li>
                    <label for="">手机号码:</label>
                   <input type="text" placeholder="11位数的手机号码" id="mobile" name="mobile"/>
                   <span class="error_tip">提示信息</span>
            </li>
               <li>
                   <label for="">验证码:</label>
                   <input type="text" name="code" placeholder="请输入手机验证码" style="width: 140px;">
                   &nbsp;&nbsp;
                   <input type="button" value=" 获取验证码" id="zphone" style="width: 100px;margin-left: 10px">
               </li>

在models.py中定义手机号码字段:

    # 不要定义int型,否则存不进数据库,会报错,Out of range
    # 建议使用char类型
    uphone = models.CharField(max_length=11)

2.使用js+ajax请求短信发送和按钮计时触发

    $('#zphone').click(
        function(){
        //发送验证码
        $.get('/user/send_message', {mobile:$('#mobile').val()}, function(msg) {
            alert(jQuery.trim(msg.msg));
            if(msg.msg=='提交成功'){
                RemainTime();
            }
        });
    })

    //按钮倒计时
    var iTime = 60;
    sTime = ''
    function RemainTime(){
        if (iTime == 0) {
            document.getElementById('zphone').disabled = false;
            sTime="获取验证码";
            iTime = 60;
            document.getElementById('zphone').value = sTime;
            return;
        }else{
            document.getElementById('zphone').disabled = true;
            sTime="重新发送(" + iTime + ")";
            iTime--;
        }
        setTimeout(function() { RemainTime() },1000)
        document.getElementById('zphone').value = sTime;
    }

    // 检查用户输入的手机号是否合法
    function check_mobile() {

        var re = /^1[345678]\d{9}$/; //校验手机号

        if(re.test($('#mobile').val()))
        {
            $('#mobile').next().hide();
            error_mobile = false;
            document.getElementById('zphone').disabled = false;
        }
        else
        {
            $('#mobile').next().html('你输入的手机格式不正确')
            $('#mobile').next().show();
            error_mobile = true;
            document.getElementById('zphone').disabled = true;
        }
    }

3.配置url

    url(r'^send_message$', views.send_message, name='send_message'),

4.定义发送短信的视图函数

# 请求的路径
host = "106.ihuyi.com"
sms_send_uri = "/webservice/sms.php?method=Submit"
# 用户名是登录ihuyi.com账号名(例如:cf_demo123)
account = "C44****38"
# 密码 查看密码请登录用户中心->验证码、通知短信->帐户及签名设置->APIKEY
password = "ddd**************30 "

def send_message(request):
    """发送信息的视图函数"""
    # 获取ajax的get方法发送过来的手机号码
    mobile = request.GET.get('mobile')
    # 通过手机去查找用户是否已经注册
    user = User.objects.filter(uphone=mobile)
    if len(user) == 1:
        return JsonResponse({'msg': "该手机已经注册"})
    # 定义一个字符串,存储生成的6位数验证码
    message_code = ''
    for i in range(6):
        i = random.randint(0, 9)
        message_code += str(i)
    # 拼接成发出的短信
    text = "您的验证码是:" + message_code + "。请不要把验证码泄露给其他人。"
    # 把请求参数编码
    params = urllib.parse.urlencode(
        {'account': account, 'password': password, 'content': text, 'mobile': mobile, 'format': 'json'})
    # 请求头
    headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
    # 通过全局的host去连接服务器
    conn = http.client.HTTPConnection(host, port=80, timeout=30)
    # 向连接后的服务器发送post请求,路径sms_send_uri是全局变量,参数,请求头
    conn.request("POST", sms_send_uri, params, headers)
    # 得到服务器的响应
    response = conn.getresponse()
    # 获取响应的数据
    response_str = response.read()
    # 关闭连接
    conn.close()
    # 把验证码放进session中
    request.session['message_code'] = message_code
    print(eval(response_str.decode()))
    # 使用eval把字符串转为json数据返回
    return JsonResponse(eval(response_str.decode()))
展开阅读全文

没有更多推荐了,返回首页