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 相关文章推荐
常见的python正则用法实例讲解
Jun 21 Python
Python selenium 三种等待方式详解(必会)
Sep 15 Python
Python时间戳使用和相互转换详解
Dec 11 Python
Python 查找字符在字符串中的位置实例
May 02 Python
Python获取昨天、今天、明天开始、结束时间戳的方法
Jun 01 Python
python实现三维拟合的方法
Dec 29 Python
使用Python做定时任务及时了解互联网动态
May 15 Python
Python异步操作MySQL示例【使用aiomysql】
May 16 Python
python在OpenCV里实现投影变换效果
Aug 30 Python
利用Python脚本批量生成SQL语句
Mar 04 Python
Python3基于plotly模块保存图片表格
Aug 03 Python
Python图片验证码降噪和8邻域降噪
Aug 30 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 前一天或后一天的日期
2008/06/28 PHP
PHP实现数据库统计时间戳按天分组输出数据的方法
2017/10/10 PHP
PHP设计模式之装饰器模式实例详解
2018/02/07 PHP
刷新页面实现方式总结(HTML,ASP,JS)
2008/11/13 Javascript
jquery 笔记 事件
2011/11/02 Javascript
Jquery中LigerUi的弹出编辑框(实现方法)
2013/07/09 Javascript
JS在可编辑的div中的光标位置插入内容的方法
2014/11/20 Javascript
JavaScript 数组- Array的方法总结(推荐)
2016/07/21 Javascript
Jquery获取当前城市的天气信息
2016/08/05 Javascript
多个上传文件用js验证文件的格式和大小的方法(推荐)
2017/03/09 Javascript
利用js的闭包原理做对象封装及调用方法
2017/04/07 Javascript
Vue中的Vux配置指南
2017/12/08 Javascript
Node Puppeteer图像识别实现百度指数爬虫的示例
2018/02/22 Javascript
微信小程序点击view动态添加样式过程解析
2020/01/21 Javascript
Vue获取微博授权URL代码实例
2020/11/04 Javascript
[01:22:10]Ti4 循环赛第二日 DK vs Empire
2014/07/11 DOTA
跟老齐学Python之关于循环的小伎俩
2014/10/02 Python
Python中的包和模块实例
2014/11/22 Python
在Python的web框架中编写创建日志的程序的教程
2015/04/30 Python
Python中的日期时间处理详解
2016/11/17 Python
Python探索之静态方法和类方法的区别详解
2017/10/27 Python
利用Python yagmail三行代码实现发送邮件
2018/05/11 Python
pytorch中tensor的合并与截取方法
2018/07/26 Python
Python使用LDAP做用户认证的方法
2019/06/20 Python
Python pandas对excel的操作实现示例
2020/07/21 Python
Python将list元素转存为CSV文件的实现
2020/11/16 Python
当当网官方旗舰店:中国图书销售夺金品牌
2018/04/02 全球购物
美丽的现代设计家具:2Modern
2018/07/26 全球购物
学年自我鉴定
2014/01/16 职场文书
运动会通讯稿50字
2014/01/30 职场文书
小学安全工作汇报材料
2014/08/19 职场文书
迟到检讨书2000字(精选篇)
2014/10/07 职场文书
房屋租赁合同协议书范本
2014/10/19 职场文书
幼儿园安全工作总结2015
2015/04/20 职场文书
工资证明格式模板
2015/06/12 职场文书
python开发飞机大战游戏
2021/07/15 Python