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自动化运维_文件内容差异对比分析
Dec 13 Python
200 行python 代码实现 2048 游戏
Jan 12 Python
Python实现XML文件解析的示例代码
Feb 05 Python
Django+Xadmin构建项目的方法步骤
Mar 06 Python
python之拟合的实现
Jul 19 Python
Python实现的微信红包提醒功能示例
Aug 22 Python
Python HTMLTestRunner可视化报告实现过程解析
Apr 10 Python
设置jupyter中DataFrame的显示限制方式
Apr 12 Python
深入理解Python 多线程
Jun 16 Python
如何利用pycharm进行代码更新比较
Nov 04 Python
Django如何继承AbstractUser扩展字段
Nov 27 Python
将不规则的Python多维数组拉平到一维的方法实现
Jan 11 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
便携利器 — TECSUN PL-365简评
2021/03/02 无线电
利用php递归实现无限分类 格式化数组的详解
2013/06/08 PHP
PHP中实现crontab代码分享
2015/03/26 PHP
WordPress导航菜单的滚动和淡入淡出效果的实现要点
2015/12/14 PHP
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
2019/10/04 PHP
JavaScript 原型继承
2011/12/26 Javascript
深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
2012/01/15 Javascript
jQuery关于导航条背景切换效果实现示例
2013/09/04 Javascript
node.js+Ajax实现获取HTTP服务器返回数据
2014/11/26 Javascript
angular.foreach 循环方法使用指南
2015/01/06 Javascript
javascript感应鼠标图片透明度显示的方法
2015/02/24 Javascript
浅谈JavaScript的事件
2015/02/27 Javascript
jQuery的css() 方法使用指南
2015/05/03 Javascript
angularJS与bootstrap结合实现动态加载弹出提示内容
2015/10/16 Javascript
Bootstrap学习笔记 轮播(Carousel)插件
2017/03/21 Javascript
如何将 jQuery 从你的 Bootstrap 项目中移除(取而代之使用Vue.js)
2017/07/17 jQuery
Angular.js中angular-ui-router的简单实践
2017/07/18 Javascript
input输入框内容实时监测(附代码)
2017/08/15 Javascript
vue element-ui table表格滚动加载方法
2018/03/02 Javascript
JS实现判断有效的数独算法示例
2019/02/25 Javascript
python实现可逆简单的加密算法
2019/03/22 Python
python队列Queue的详解
2019/05/10 Python
简单了解python中对象的取反运算符
2019/07/01 Python
python飞机大战pygame游戏之敌机出场实现方法详解
2019/12/17 Python
Opencv python 图片生成视频的方法示例
2020/11/18 Python
HTML5的文档结构和新增标签完全解析
2017/04/21 HTML / CSS
介绍一些UNIX常用简单命令
2014/11/11 面试题
数控专业推荐信范文
2013/12/02 职场文书
外语系毕业生自荐信范文
2013/12/16 职场文书
国庆节标语大全
2014/10/08 职场文书
八年级上册语文教学计划
2015/01/22 职场文书
golang 在windows中设置环境变量的操作
2021/04/29 Golang
MYSQL主从数据库同步备份配置的方法
2021/05/26 MySQL
Python+tkinter实现高清图片保存
2022/03/13 Python
PO模式在selenium自动化测试框架的优势
2022/03/20 Python
Windows Server 版本 20H2 于 8 月 9 日停止支持,Win10 版本 21H1 将于 12 月结束支
2022/07/23 数码科技