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实现JAVA源代码从ANSI到UTF-8的批量转换方法
Aug 10 Python
用Python实现命令行闹钟脚本实例
Sep 05 Python
详解python 拆包可迭代数据如tuple, list
Dec 29 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
Nov 14 Python
python 判断矩阵中每行非零个数的方法
Jan 26 Python
对IPython交互模式下的退出方法详解
Feb 16 Python
python GUI实现小球满屏乱跑效果
May 09 Python
使用Python做垃圾分类的原理及实例代码附源码
Jul 02 Python
对Pytorch中nn.ModuleList 和 nn.Sequential详解
Aug 18 Python
Python3 字典dictionary入门基础附实例
Feb 10 Python
解决pycharm不能自动补全第三方库的函数和属性问题
Mar 12 Python
Django如何使用redis作为缓存
May 21 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 处理图片的类实现代码
2009/10/23 PHP
php比较多维数组中值的大小排序实现代码
2012/09/08 PHP
php检查字符串中是否有外链的方法
2015/07/29 PHP
php判断用户是否关注微信公众号
2016/07/22 PHP
打开超链需要“确认”对话框的方法
2007/03/08 Javascript
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
2011/04/16 Javascript
javascript获取URL参数与参数值的示例代码
2013/12/20 Javascript
在javascript中随机数 math random如何生成指定范围数值的随机数
2015/10/21 Javascript
JavaScript实现简单获取当前网页网址的方法
2015/11/09 Javascript
JavaScript使用DeviceOne开发实战(四)仿优酷视频应用
2015/12/02 Javascript
详解js中构造流程图的核心技术JsPlumb
2015/12/08 Javascript
在小程序中推送模板消息的实现方法
2019/07/22 Javascript
Vue实现数据请求拦截
2019/10/23 Javascript
uniapp,微信小程序中使用 MQTT的问题
2020/07/11 Javascript
Vue实现菜单切换功能
2020/11/08 Javascript
python通过scapy获取局域网所有主机mac地址示例
2014/05/04 Python
Python获取远程文件大小的函数代码分享
2014/05/13 Python
浅谈编码,解码,乱码的问题
2016/12/30 Python
python XlsxWriter模块创建aexcel表格的实例讲解
2018/05/03 Python
pycharm远程linux开发和调试代码的方法
2018/07/17 Python
python中使用zip函数出现错误的原因
2018/09/28 Python
浅谈python的深浅拷贝以及fromkeys的用法
2019/03/08 Python
Python测试线程应用程序过程解析
2019/12/31 Python
解决python运行启动报错问题
2020/06/01 Python
css3的focus-within选择器的使用
2020/05/11 HTML / CSS
html5教程制作简单画板代码分享
2013/12/04 HTML / CSS
HTML5新增加标签和功能概述
2016/09/05 HTML / CSS
Maisons du Monde德国:法国家具和装饰的市场领导者
2019/07/26 全球购物
应届生妇产科护士求职信
2013/10/27 职场文书
公司端午节活动方案
2014/02/04 职场文书
酒会邀请函
2015/01/31 职场文书
环卫个人总结
2015/03/03 职场文书
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
2021/04/05 MySQL
用javascript制作qq注册动态页面
2021/04/14 Javascript
使用CSS实现小三角边框原理解析
2021/11/07 HTML / CSS
分析Python list操作为什么会错误
2021/11/17 Python