until:

import json, urllib
from urllib.parse import urlencode
# 发送短信
def request2(mobile,num, m="GET"):
appkey = 'a0d6d54cb54e74478f0eca04bdef'#'abf6ecebfa954395dad7dcc6be7c8'
url = "http://v.juhe.cn/sms/send"
params = {
"mobile": mobile, # 接收短信的手机号码
"tpl_id": '6',#"666666" 短信模板ID,请参考个人中心短信模板设置
"tpl_value": "#code#=%s"%num,
# 变量名和变量值对。如果你的变量名或者变量值中带有#&=中的任意一个特殊符号,请先分别进行urlencode编码后再传递,<a href="http://www.juhe.cn/news/index/id/50" target="_blank">详细说明></a>
"key": appkey,#appkey应用APPKEY(应用详细页查询)
"dtype": "", # 返回数据的格式,xml或json,默认json
}
params = urlencode(params)
if m == "GET":
f = urllib.request.urlopen("%s?%s" % (url, params))
else:
f = urllib.request.urlopen(url, params)
content = f.read()
res = json.loads(content)
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"
# print("request api error")

views:

from django.shortcuts import render,HttpResponse,redirect
from app01.models import *
from app01.utils import sendMsg as sm
import json def login3(request):
'''手机验证码'''
res = {'s':None,'info':None}
if request.POST.get('sendSms'):
''''''
# 获得phone
phone = request.POST.get('phone')
if Phone_auth(phone):
'''手机号符合规则'''
pass
else:
'''手机号不符合规则'''
res['s'] = 0
res['info'] = '手机号不符合规则'
return HttpResponse(json.dumps(res))
# 获得4位验证码
num = Num(4)
# 验证码保存到request里
request.session['authcode'] = num
# 发送短信
# get = sm.request2(phone,num)
get = 'ok'
# 判断是否发送成功
if get == 'ok':
'''发送成功'''
print('发送成功',num)
res['s'] = 1
res['info'] = '发送成功'
return HttpResponse(json.dumps(res))
else:
'''发送失败'''
print('发送失败:{}'.format(get))
res['s'] = 0
res['info'] = get
return HttpResponse(json.dumps(res)) if request.POST.get('dosubmit'):
''''''
# 获得phone
phone = request.POST.get('phone')
authcode = request.POST.get('authcode')
if authcode != request.session['authcode']:
'''验证码输入错误'''
res['s'] = 0
res['info'] = '验证码输入错误'
print(res)
return HttpResponse(json.dumps(res))
# 获得用户对象
member_obj = Member.objects.filter(member_tel=phone).first()
request.session['member_name'] = member_obj.member_name
request.session['member_id'] = member_obj.id
# 登陆成功
res['s'] = 1
res['info'] = '登陆成功'
print(res)
return HttpResponse(json.dumps(res))
return render(request, 'app01_login3.html', locals()) def Num(n:int)->str:
'''产生n个随机字符串---根列表 ‘1234567890’ '''
import random
str1 = ''
phone_list = [] for i in range(n):
'''循环n次,添加到列表里'''
phone_list.append(random.choice(str1))
return ''.join(phone_list) def Phone_auth(phone:str)->bool:
'''手机号规则限定'''
import re
if phone == '':
return False
elif re.match('^[1][1-8]\d{9}$',phone) is not None:
return True
else:
return False

html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>手机验证码</title>
</head>
<body>
<form action="" method="post">
{% csrf_token %}
手机号<input type="text" name="phone" id="phoneid"><br>
验证码<input type="text" name="authcode" id="authcodeid">
<input id="getauthcode" type="button" value="获取验证码"/>
<input id="nowgma" style="display: none;" type="button" value=""/>
<br>
<input class="submit " type="button" id="login" value="登录"/> </form>
</body>
</html>
<script src="/static/js/jquery.min.js"></script>
<script src="/static/layer/layer.js"></script>
<script>
$(document).ready(function () {
{# js运行 #}
$('#getauthcode').click(function () {
{# 获取验证码点击事件 #}
var phone_str = $.trim($('#phoneid').val());
var re_str = /^[1][1-8]\d{9}/;
{# 获取手机号,清空空格和设置正则#}
if(phone_str == ''){
{# 手机号为空#}
layer.msg('手机号不能为空!');
return false
}else if(!re_str.test(phone_str)){
{# 手机号格式不正确#}
layer.msg('手机号格式不正确!');
return false
}else{
{# 手机号传入服务器 #}
var formdata = {
'phone':phone_str,
'sendSms': 1,//代表我是发送短信验证码的请求
"csrfmiddlewaretoken":"{{ csrf_token }}"
};
$.post('{% url 'app01:login3' %}',formdata,function (data) {
{# 接收后端数据 #}
if (data['s'] == 0){
{# 不成功 #}
layer.msg(data['info']);
return false
}else{
{# 发送成功 #}
console.log(data);
// 启动定时器
timeout();
layer.msg(data['info']);
{# #}
}
},'json')
}
}); $('#login').click(function(){
Login()
}); function Login() {
{# 登陆函数#}
$("#login").click(function () {
var phone = $.trim($("#phoneid").val());
var authcode = $.trim($("#authcodeid").val()); $.post("/login3/", {
"phone": phone,
"authcode": authcode,
"dosubmit": 1,
"csrfmiddlewaretoken":"{{ csrf_token }}"
}, function (data) {
if (data['s'] == 1) {
alert("登录成功!");
// 跳转主页面
location.href="{% url 'app01:index' %}";
} else {
alert(data['info']);
}
return false;
}, "json");
});
}
var sec = 60;
var interval = null;
//开启定时器
function timeout() {
interval = setInterval(run, 1000);
}
function run() {
if (sec >= 1) {
sec--;
console.log(sec);
$("#getauthcode").hide();
$("#nowgma").show();
$("#nowgma").val("倒计时(" + sec + ")s"); } else {
{# $("#yanzhengma").off('click');#}
{# $('#yanzhengma').on("click", function (event) {#}
{# getSmsCode();#}
{# });#}
$("#getauthcode").show();
$("#nowgma").hide();
clearInterval(interval);//关闭定时器 }}
})
</script>

python-Web-django-短信登陆的更多相关文章

  1. python 阿里云短信群发推送

    本篇文章是使用Python的Web框架Django提供发送短信接口供前端调用,Python版本2.7 阿里云入驻.申请短信服务.创建应用和模板等步骤请参考:阿里云短信服务入门 1.下载sdk 阿里云短 ...

  2. python web -- django

    一. 安装 django $ pip install django (env)$ python >> import django >> django.VERSION >& ...

  3. python web——Django架构

    环境:windows/linux/OS 需要的软件:Firefox 浏览器(别的也可以 不过firfox和python的webdriver兼容性好) git版本控制系统(使用前要配置 用户 编辑器可以 ...

  4. 用Python免费发短信,实现程序实时报警

    进入正文 今天跟大家分享的主题是利用python库twilio来免费发送短信. 先放一张成品图: 代码放在了本文最后的地址中 正文 眼尖的小伙伴已经发现了上面的短信的前缀显示这个短信来自于一个叫Twi ...

  5. Python twilio发短信实践

    twilio注册地址   注册的时候可能会报错   最好是*** -->注册-->注册完毕后代码运行是不需要***的 https://www.twilio.com/console 需要pi ...

  6. zabbix 利用python脚本实现短信告警

    一.编写脚本 cd /usr/local/zabbix-4.0.3/share/zabbix/alertscripts vi zabbix_sms.py 内容如下: #!/usr/bin/python ...

  7. 基于阿里云平台的使用python脚本发送短信

    第一步:点击短信服务下的帮助文档 第二步:安装python的SDK:点击安装python sdk 第三步:直接通过python的pip工具安装即可,方便快捷: 第四步:点击红框进行测试: 第五步:测试 ...

  8. 青龙+Nvjdc短信登陆对接Xdd-plus推送+Ninja CK登陆教程(11.23更新)

    一.准备工作 1.shh工具(powshell.gitbash等等) 2.购买一台云服务器(阿里云.腾讯云都可以) 3.安装宝塔面板 宝塔Linux面板安装教程 - 2021年8月18日更新 - 7. ...

  9. python免费发送短信

    pip install twilio from twilio.rest import Client # Your Account SID from twilio.com/console account ...

  10. python 实现发送短信验证码

    [说明]短信接口使用的是“聚合数据”上面的接口. 那么在使用接口前,需要在聚合数据上面注册,进行申请接口.当然在正式使用之前,我们可以使用申请免得的进行测试. 一.申请成功后,需做的准备工作如下: 1 ...

随机推荐

  1. Git-------常用操作记录

    说明: 一般情况下,git要将内容提交到本地仓库,都是先将内容提交到暂存区,然后再从暂存区提交到本地仓库. 常用命令(一个简单的示例操作): git init:会默认创建一个分支,命名为master ...

  2. 项目管理工具!DevExpress Winforms Gantt控件 v19.2强势来袭

    DevExpress Winforms Controls 内置140多个UI控件和库,完美构建流畅.美观且易于使用的应用程序.无论是Office风格的界面,还是分析处理大批量的业务数据,DevExpr ...

  3. Hadoop-No.10之列簇

    HBase中包含列簇(column family)的概念.列簇本质上是列的存储容器.一张表可以有一个或多个列簇.每个列簇都有自己的HFile结婚,而且在执行合并操作时,同一个表的其他列簇不受影响 在很 ...

  4. HDU 5727 Necklace ( 2016多校、二分图匹配 )

    题目链接 题意 : 给出 2*N 颗珠子.有 N 颗是阴的.有 N 颗是阳的.现在要把阴阳珠子串成一个环状的项链.而且要求珠子的放置方式必须的阴阳相间的.然后给出你 M 个限制关系.格式为 ( A.B ...

  5. JQuery调用绑定click事件的3种写法

    第一种方式: $(document).ready(function(){ $("#clickme").click(function(){ alert("Hello Wor ...

  6. 整合到 Mockito 2

    为了能够持续改进 Mockito 和在未来提升测试体验,我们希望你能够升级到 Mockito 2.10!Mockito 按照语义化版本(semantic versioning)的方式对版本进行编排,并 ...

  7. 洛谷比赛 U5442 买(最长链)

    U5442 买 题目提供者bqsgwys 标签 树形结构 树的遍历 洛谷原创 题目背景 小E是个可爱的电路编码员. 题目描述 一天小E又要准备做电路了,他准备了一个电路板,上面有很多个电路元器件要安装 ...

  8. centos 7 php7 yum源

    rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm rpm -Uvh https://mir ...

  9. DOM访问关系(父节点 子节点)

    把下面的知识点掌握了,可以做一下下面的案例,都是工作中常用的,很有用 知识点   1.带Eleent和不带区别     a)带Element的获取的是元素节点     b)不带Element的获取文本 ...

  10. 解决分页插件ClassNotFoundException: org.springframework.boot.bind.RelaxedPropertyResolver

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.github.p ...