溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

django項(xiàng)目中使用手機(jī)號登錄的實(shí)例代碼

發(fā)布時(shí)間:2020-10-12 19:45:41 來源:腳本之家 閱讀:134 作者:記住我忘記我 欄目:開發(fā)技術(shù)

本文使用聚合數(shù)據(jù)的短信接口,需要先獲取到申請接口的appkey和模板id

項(xiàng)目目錄下創(chuàng)建ubtils文件夾,定義返回隨機(jī)驗(yàn)證碼和調(diào)取短信接口的函數(shù)

function.py文件

import random
import re
# 隨機(jī)數(shù)
def range_num(num):
  # 定義一個(gè)種子,從這里面隨機(jī)拿出一個(gè)值,可以是字母
  seeds = "1234567890"
  # 定義一個(gè)空列表,每次循環(huán),將拿到的值,加入列表
  random_num = []
  # choice函數(shù):每次從seeds拿一個(gè)值,加入列表
  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
# 發(fā)送短信
def request2(mobile,num, m="GET"):
  appkey = '6bba3e7dffa71b79483002e1d92f4d00'
  url = "http://v.juhe.cn/sms/send"
  params = {
    "mobile": mobile, # 接收短信的手機(jī)號碼
    "tpl_id": "167106", # 短信模板ID,請參考個(gè)人中心短信模板設(shè)置
    "tpl_value": "#code#=%s"%num,
  # 變量名和變量值對。如果你的變量名或者變量值中帶有#&=中的任意一個(gè)特殊符號,請先分別進(jìn)行urlencode編碼后再傳遞,<a href="http://www.juhe.cn/news/index/id/50" target="_blank">詳細(xì)說明></a>
    "key": appkey, # 應(yīng)用APPKEY(應(yīng)用詳細(xì)頁查詢)
    "dtype": "", # 返回?cái)?shù)據(jù)的格式,xml或json,默認(rèn)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轉(zhuǎn)字典
  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"

路由

# 手機(jī)驗(yàn)證碼登錄
path('loginTel/', login.loginTel,name='loginTel'),

方法

from blog.utils import sendMsg 
from blog.utils import function # 引入自定義的驗(yàn)證碼
# 手機(jī)驗(yàn)證登陸
def loginTel(request):
  res = {'status': None, 'info': None}
  # 點(diǎn)擊發(fā)送短信執(zhí)行以下程序
  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']='發(fā)送成功%s'%range_num
      res['info'] = '發(fā)送成功'
      print(res)
      return HttpResponse(json.dumps(res)) # 把這個(gè)結(jié)果告訴給前臺,ajax
    else:
      res['status'] = 0
      res['info'] = '發(fā)送失敗'
      return HttpResponse(json.dumps(res)) # 把這個(gè)結(jié)果告訴給前臺,ajax
  # 點(diǎn)擊登錄按鈕執(zhí)行以下程序:
  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'] = '短信驗(yàn)證碼不正確'
        return HttpResponse(json.dumps(res)) # 把這個(gè)結(jié)果告訴給前臺,ajax
    else:
      res['status'] = 0
      res['info'] = '短信驗(yàn)證碼不存在'
      return HttpResponse(json.dumps(res)) # 把這個(gè)結(jié)果告訴給前臺,ajax
    # 寫判斷手機(jī)號是否在會員表中
    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)) # 把這個(gè)結(jié)果告訴給前臺,ajax
  return render(request, 'blog/loginTel.html', locals())

前端登錄的表單

{#手機(jī)登陸的表單#}
<form method="post">
  <input type="text" name="user_tel" placeholder="請輸入手機(jī)號">
  <input type="text" name="validcode" placeholder="請輸入短信驗(yàn)證碼">
  <div class="am-g">
    <input id="yanzhengma" type="button" value="獲取驗(yàn)證碼"/>
    <input id="nowYanzhengma"  type="button" value=""/>
    <input class="submit " type="button" id="btn_login" value="登錄"/>
  </div>
</form>
{#手機(jī)登陸的表單#}

前端登錄的jquery

{#手機(jī)號登陸的jquery#}
//校驗(yàn)用戶名
$("#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("登錄成功!即將跳轉(zhuǎn)至首頁~");
      location.href = "{% url 'index' %}";
    } else {
      layer.msg(data['info']);
    }
    return false;
  }, "json");
});
//點(diǎn)擊獲取驗(yàn)證碼按鈕
$("#yanzhengma").click(function () {
  getSmsCode();
});
//獲取短信驗(yàn)證碼
function getSmsCode() {
  var user_tel = $.trim($("input[name='user_tel']").val());//得到頁面里的手機(jī)號碼
  var reguser = /^[1][3-8]\d{9}$/;
  if (user_tel == "") {
    layer.msg("請?zhí)顚懯謾C(jī)號碼");
    return false;
  }
  if (!reguser.test(user_tel)) {
    layer.msg("手機(jī)號碼格式不正確");
    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;
//開啟定時(shí)器
function timeout() {
  interval = setInterval(run, 1000);
}
function run() {
  if (sec >= 1) {
    sec--;
    $("#yanzhengma").hide();
    $("#nowYanzhengma").show();
    $("#nowYanzhengma").val("倒計(jì)時(shí)(" + sec + ")s");
  } else {
    $("#yanzhengma").off('click');
    $('#yanzhengma').on("click", function (event) {
      getSmsCode();
    });
    $("#yanzhengma").show();
    $("#nowYanzhengma").hide();
    clearInterval(interval);//關(guān)閉定時(shí)器
    sec = 60;
  }
}
{#手機(jī)號登陸的jquery結(jié)束#}

前端效果


django項(xiàng)目中使用手機(jī)號登錄的實(shí)例代碼

總結(jié)

以上所述是小編給大家介紹的django項(xiàng)目中使用手機(jī)號登錄的實(shí)例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對億速云網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI