django项目中使用手机号登录的实例代码


Posted in Python onAugust 15, 2019

本文使用聚合数据的短信接口,需要先获取到申请接口的appkey和模板id

项目目录下创建ubtils文件夹,定义返回随机验证码和调取短信接口的函数

function.py文件

import random
import re
# 随机数
def range_num(num):
  # 定义一个种子,从这里面随机拿出一个值,可以是字母
  seeds = "1234567890"
  # 定义一个空列表,每次循环,将拿到的值,加入列表
  random_num = []
  # choice函数:每次从seeds拿一个值,加入列表
  for i in range(num):
    random_num.append(random.choice(seeds))
  # 将列表里的值,变成四位字符串
  return "" . join(random_num)#5454

sendMsg.py文件

import json, urllib
from urllib.parse import urlencode
# 发送短信
def request2(mobile,num, m="GET"):
  appkey = '6bba3e7dffa71b79483002e1d92f4d00'
  url = "http://v.juhe.cn/sms/send"
  params = {
    "mobile": mobile, # 接收短信的手机号码
    "tpl_id": "167106", # 短信模板ID,请参考个人中心短信模板设置
    "tpl_value": "#code#=%s"%num,
  # 变量名和变量值对。如果你的变量名或者变量值中带有#&=中的任意一个特殊符号,请先分别进行urlencode编码后再传递,<a href="http://www.juhe.cn/news/index/id/50" target="_blank">详细说明></a>
    "key": appkey, # 应用APPKEY(应用详细页查询)
    "dtype": "", # 返回数据的格式,xml或json,默认json
  }
  params = urlencode(params)#mobile=15038062130&tpl_id=166467&tpl_value=%23code%23%3d431515&key=dabf6ecaebfa9554395dad7dcc6be7c8
  if m == "GET":
    f = urllib.request.urlopen("%s?%s" % (url, params))
  else:
    f = urllib.request.urlopen(url, params)
  content = f.read()#{"reason":"操作成功","result":{"sid":"201906200911371223162juhe6hy","fee":1,"count":1},"error_code":0}
  res = json.loads(content)#json转字典
  if res:
    error_code = res["error_code"]
    if error_code == 0:
      # 成功请求
      return 'ok'
      # print(res["result"])
    else:
      return "%s:%s" % (res["error_code"], res["reason"])
      # print("%s:%s" % (res["error_code"], res["reason"]))
  else:
    return "request api error"

路由

# 手机验证码登录
path('loginTel/', login.loginTel,name='loginTel'),

方法

from blog.utils import sendMsg 
from blog.utils import function # 引入自定义的验证码
# 手机验证登陆
def loginTel(request):
  res = {'status': None, 'info': None}
  # 点击发送短信执行以下程序
  if request.POST.get('sendSms') == '1':
    tel = request.POST.get('user_tel')
    print(tel)
    range_num = function.range_num(4); # 5454
    request.session['validcode'] = range_num
    result = sendMsg.request2(tel, range_num, "GET")
    # result='ok'
    if result == 'ok':
      res['status'] = 1
      # res['info']='发送成功%s'%range_num
      res['info'] = '发送成功'
      print(res)
      return HttpResponse(json.dumps(res)) # 把这个结果告诉给前台,ajax
    else:
      res['status'] = 0
      res['info'] = '发送失败'
      return HttpResponse(json.dumps(res)) # 把这个结果告诉给前台,ajax
  # 点击登录按钮执行以下程序:
  if request.POST.get('dosubmit') == '1':
    validcode_form = request.POST.get('validcode')
    validcode_session = request.session.get('validcode') # 获取session
    if validcode_form:
      if validcode_form != validcode_session:
        res['status'] = 0
        res['info'] = '短信验证码不正确'
        return HttpResponse(json.dumps(res)) # 把这个结果告诉给前台,ajax
    else:
      res['status'] = 0
      res['info'] = '短信验证码不存在'
      return HttpResponse(json.dumps(res)) # 把这个结果告诉给前台,ajax
    # 写判断手机号是否在会员表中
    member_obj = Member.objects.filter(member_tel=request.POST.get('user_tel')).first()
    if member_obj:
      request.session['member_id'] = member_obj.member_id
      request.session['member_name'] = member_obj.member_name
      res['status'] = 1
      res['info'] = '登录成功'
      return HttpResponse(json.dumps(res)) # 把这个结果告诉给前台,ajax
  return render(request, 'blog/loginTel.html', locals())

前端登录的表单

{#手机登陆的表单#}
<form method="post">
  <input type="text" name="user_tel" placeholder="请输入手机号">
  <input type="text" name="validcode" placeholder="请输入短信验证码">
  <div class="am-g">
    <input id="yanzhengma" type="button" value="获取验证码"/>
    <input id="nowYanzhengma" style="display: none;" type="button" value=""/>
    <input class="submit " type="button" id="btn_login" value="登录"/>
  </div>
</form>
{#手机登陆的表单#}

前端登录的jquery

{#手机号登陆的jquery#}
//校验用户名
$("#btn_login").click(function () {
  var user_tel = $.trim($("input[name='user_tel']").val());
  var validcode = $.trim($("input[name='validcode']").val());
  $.post("/blog/loginTel/", {
    "user_tel": user_tel,
    "validcode": validcode,
    "dosubmit": 1,
    "csrfmiddlewaretoken": "{{ csrf_token }}"
  }, function (data) {
    if (data['status'] == 1) {
      layer.msg("登录成功!即将跳转至首页~");
      location.href = "{% url 'index' %}";
    } else {
      layer.msg(data['info']);
    }
    return false;
  }, "json");
});
//点击获取验证码按钮
$("#yanzhengma").click(function () {
  getSmsCode();
});
//获取短信验证码
function getSmsCode() {
  var user_tel = $.trim($("input[name='user_tel']").val());//得到页面里的手机号码
  var reguser = /^[1][3-8]\d{9}$/;
  if (user_tel == "") {
    layer.msg("请填写手机号码");
    return false;
  }
  if (!reguser.test(user_tel)) {
    layer.msg("手机号码格式不正确");
    return false;
  }
  {#$("#yanzhengma").off('click');#}
  $.post("/blog/loginTel/", {
    "user_tel": user_tel,
    'sendSms': 1,
    "csrfmiddlewaretoken": "{{ csrf_token }}"
  }, function (data) {
    if (data['status'] == 1) {
      timeout();
      layer.msg(data['info']);
    } else {
      layer.msg(data['content']);
    }
  }, 'json');
}
var sec = 60;
var interval = null;
//开启定时器
function timeout() {
  interval = setInterval(run, 1000);
}
function run() {
  if (sec >= 1) {
    sec--;
    $("#yanzhengma").hide();
    $("#nowYanzhengma").show();
    $("#nowYanzhengma").val("倒计时(" + sec + ")s");
  } else {
    $("#yanzhengma").off('click');
    $('#yanzhengma').on("click", function (event) {
      getSmsCode();
    });
    $("#yanzhengma").show();
    $("#nowYanzhengma").hide();
    clearInterval(interval);//关闭定时器
    sec = 60;
  }
}
{#手机号登陆的jquery结束#}

前端效果

django项目中使用手机号登录的实例代码

总结

以上所述是小编给大家介绍的django项目中使用手机号登录的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Django中更新多个对象数据与删除对象的方法
Jul 17 Python
python 性能优化方法小结
Mar 31 Python
Python实现找出数组中第2大数字的方法示例
Mar 26 Python
Pycharm更换python解释器的方法
Oct 29 Python
Python通用循环的构造方法实例分析
Dec 19 Python
Python和Go语言的区别总结
Feb 20 Python
python使用pymongo操作mongo的完整步骤
Apr 13 Python
Pycharm新手教程(只需要看这篇就够了)
Jun 18 Python
解决redis与Python交互取出来的是bytes类型的问题
Jul 16 Python
PyQt5多线程防卡死和多窗口用法的实现
Sep 15 Python
python实现模拟器爬取抖音评论数据的示例代码
Jan 06 Python
Python tkinter之ComboBox(下拉框)的使用简介
Feb 05 Python
python基于pdfminer库提取pdf文字代码实例
Aug 15 #Python
python模拟键盘输入 切换键盘布局过程解析
Aug 15 #Python
django项目登录中使用图片验证码的实现方法
Aug 15 #Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
Aug 15 #Python
解析python的局部变量和全局变量
Aug 15 #Python
python实现的自动发送消息功能详解
Aug 15 #Python
python调用支付宝支付接口流程
Aug 15 #Python
You might like
PHP常用开发函数解析之数组篇[未完结]
2012/07/30 PHP
php递归删除指定文件夹的方法小结
2015/04/20 PHP
php+ajax无刷新上传图片实例代码
2015/11/17 PHP
PHP两个n位的二进制整数相加问题的解决
2018/08/26 PHP
PHP 获取客户端 IP 地址的方法实例代码
2018/11/11 PHP
Laravel框架自定义验证过程实例分析
2019/02/01 PHP
Yii框架常见缓存应用实例小结
2019/09/09 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
jquery 最简单的属性菜单
2009/10/08 Javascript
JS 实现双色表格实现代码
2009/11/24 Javascript
nodejs中操作mysql数据库示例
2014/12/20 NodeJs
jQuery大于号(&gt;)选择器的作用解释
2015/01/13 Javascript
javascript数字验证的实例代码(推荐)
2016/08/20 Javascript
用jQuery.ajaxSetup实现对请求和响应数据的过滤
2016/12/20 Javascript
jQuery插件HighCharts实现的2D面积图效果示例【附demo源码下载】
2017/03/15 Javascript
easyui-edatagrid.js实现回车键结束编辑功能的实例
2017/04/12 Javascript
JavaScript字符串检索字符的方法
2017/06/23 Javascript
将angular.js项目整合到.net mvc中的方法详解
2017/06/29 Javascript
python爬取安居客二手房网站数据(实例讲解)
2017/10/19 Javascript
vue做移动端适配最佳解决方案(亲测有效)
2018/09/04 Javascript
详解Vue 动态组件与全局事件绑定总结
2018/11/11 Javascript
Node.js原生api搭建web服务器的方法步骤
2019/02/15 Javascript
Vue+tracking.js 实现前端人脸检测功能
2020/04/16 Javascript
python文件读写操作与linux shell变量命令交互执行的方法
2015/01/14 Python
解决django 新增加用户信息出现错误的问题
2019/07/28 Python
Python+OpenCV实现实时眼动追踪的示例代码
2019/11/11 Python
Pycharm中Python环境配置常见问题解析
2020/01/16 Python
html5拖拽应用记录及注意点
2020/05/27 HTML / CSS
美国隐形眼镜销售网站:ContactsDirect
2017/10/28 全球购物
应聘英语教师求职信
2014/04/24 职场文书
心理咨询承诺书
2014/05/20 职场文书
项目经理任命书
2014/06/04 职场文书
我的中国梦演讲稿高中篇
2014/08/19 职场文书
学风建设主题班会
2015/08/17 职场文书
导游词之河北野三坡
2019/12/11 职场文书
MySQL中的全表扫描和索引树扫描
2022/05/15 MySQL