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 urlopen()函数 示例分享
Jun 12 Python
Python3实现Web网页图片下载
Jan 28 Python
python批量设置多个Excel文件页眉页脚的脚本
Mar 14 Python
python 文件转成16进制数组的实例
Jul 09 Python
Flask框架配置与调试操作示例
Jul 23 Python
python3 批量获取对应端口服务的实例
Jul 25 Python
Python 闭包,函数分隔作用域,nonlocal声明非局部变量操作示例
Oct 14 Python
python 实现多线程下载视频的代码
Nov 15 Python
TensorFlow梯度求解tf.gradients实例
Feb 04 Python
Pyecharts 动态地图 geo()和map()的安装与用法详解
Mar 25 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
May 21 Python
Python如何telnet到网络设备
Feb 18 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
DEDE采集大师官方留后门的删除办法
2011/01/08 PHP
php删除页面记录 同时刷新页面 删除条件用GET方式获得
2012/01/10 PHP
php实现专业获取网站SEO信息类实例
2015/04/02 PHP
PHP访问数据库集群的方法小结
2016/03/14 PHP
PHP序列化的四种实现方法与横向对比
2018/11/29 PHP
JavaScript 页面编码与浏览器类型判断代码
2010/06/03 Javascript
jQuery数据缓存功能的实现思路及简单模拟
2013/05/27 Javascript
购物车选中得到价格实现示例
2014/01/26 Javascript
Ajax中解析Json的两种方法对比分析
2015/06/25 Javascript
JavaScript验证Email(3种方法)
2015/09/21 Javascript
浅谈node.js中async异步编程
2015/10/22 Javascript
jQuery实现分隔条左右拖动功能
2015/11/21 Javascript
jQuery轮播图实例详解
2018/08/15 jQuery
react native基于FlatList下拉刷新上拉加载实现代码示例
2018/09/30 Javascript
防止Layui form表单重复提交的实现方法
2019/09/10 Javascript
vue实现随机验证码功能(完整代码)
2019/12/10 Javascript
vue+elementui通用弹窗的实现(新增+编辑)
2021/01/07 Vue.js
[05:45]Ti4观战指南(下)
2014/07/07 DOTA
使用rst2pdf实现将sphinx生成PDF
2016/06/07 Python
Python编写简单的HTML页面合并脚本
2016/07/11 Python
Python3操作SQL Server数据库(实例讲解)
2017/10/21 Python
python 函数中的参数类型
2020/02/11 Python
美国网上眼镜供应商:LEOTONY(眼镜、RX太阳镜和太阳镜)
2017/10/31 全球购物
求职简历中个人的自我评价
2013/12/01 职场文书
大学生自我鉴定
2013/12/08 职场文书
财务工作个人求职的自我评价
2013/12/19 职场文书
25岁生日感言
2014/01/13 职场文书
医学生个人求职信范文
2014/02/07 职场文书
亮化工程实施方案
2014/03/17 职场文书
学生未请假就回家检讨书
2014/09/22 职场文书
2014单位领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
应届毕业生求职信范文
2015/03/19 职场文书
小学感恩主题班会
2015/08/12 职场文书
高中数学教学反思范文
2016/02/18 职场文书
医学会议开幕词
2016/03/03 职场文书
关于Vue中的options选项
2022/03/22 Vue.js