python-Web-django-短信登陆
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-短信登陆的更多相关文章
- python 阿里云短信群发推送
本篇文章是使用Python的Web框架Django提供发送短信接口供前端调用,Python版本2.7 阿里云入驻.申请短信服务.创建应用和模板等步骤请参考:阿里云短信服务入门 1.下载sdk 阿里云短 ...
- python web -- django
一. 安装 django $ pip install django (env)$ python >> import django >> django.VERSION >& ...
- python web——Django架构
环境:windows/linux/OS 需要的软件:Firefox 浏览器(别的也可以 不过firfox和python的webdriver兼容性好) git版本控制系统(使用前要配置 用户 编辑器可以 ...
- 用Python免费发短信,实现程序实时报警
进入正文 今天跟大家分享的主题是利用python库twilio来免费发送短信. 先放一张成品图: 代码放在了本文最后的地址中 正文 眼尖的小伙伴已经发现了上面的短信的前缀显示这个短信来自于一个叫Twi ...
- Python twilio发短信实践
twilio注册地址 注册的时候可能会报错 最好是*** -->注册-->注册完毕后代码运行是不需要***的 https://www.twilio.com/console 需要pi ...
- zabbix 利用python脚本实现短信告警
一.编写脚本 cd /usr/local/zabbix-4.0.3/share/zabbix/alertscripts vi zabbix_sms.py 内容如下: #!/usr/bin/python ...
- 基于阿里云平台的使用python脚本发送短信
第一步:点击短信服务下的帮助文档 第二步:安装python的SDK:点击安装python sdk 第三步:直接通过python的pip工具安装即可,方便快捷: 第四步:点击红框进行测试: 第五步:测试 ...
- 青龙+Nvjdc短信登陆对接Xdd-plus推送+Ninja CK登陆教程(11.23更新)
一.准备工作 1.shh工具(powshell.gitbash等等) 2.购买一台云服务器(阿里云.腾讯云都可以) 3.安装宝塔面板 宝塔Linux面板安装教程 - 2021年8月18日更新 - 7. ...
- python免费发送短信
pip install twilio from twilio.rest import Client # Your Account SID from twilio.com/console account ...
- python 实现发送短信验证码
[说明]短信接口使用的是“聚合数据”上面的接口. 那么在使用接口前,需要在聚合数据上面注册,进行申请接口.当然在正式使用之前,我们可以使用申请免得的进行测试. 一.申请成功后,需做的准备工作如下: 1 ...
随机推荐
- $'\r': command not found
在Linux下执行程序最省事的方式就是将系统的执行流程封装成一个shell脚本,上传到linux环境中后就可以直接执行了,但是今天在具体实施的时候出现了错误 $'\r': command not fo ...
- 箭头函数中可改变this作用域,回调函数用箭头函数this指向page,自定义事件用箭头函数this指向undefined
1.回调函数中,用箭头函数改变this的作用域 success: (res)=>{ this.setData({ //此时,this指向page页面 ... }) } 2.自定义事件中,如果使用 ...
- php类知识---try catch
<?php try { echo "比赛开始"."\n"; ); } catch (Exception $e ) { echo "获取错误信息: ...
- @Valid与@Validated
Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303规范,是标准JSR-303的一个变种),javax提供了@Valid(标准JSR- ...
- [Docker]docker搭建私有仓库(ssl、身份认证)
docker搭建私有仓库(ssl.身份认证) 环境:CentOS 7.Docker 1.13.1 CentOS 7相关: https://www.cnblogs.com/ttkl/p/11041124 ...
- java常见问题 ——编辑报错1
报错1 The method add(CatNode) in the type List<CatNode> is not applicable for the arguments (Str ...
- Web上传超大文件解决方案
文件上传下载,与传统的方式不同,这里能够上传和下载10G以上的文件.而且支持断点续传. 通常情况下,我们在网站上面下载的时候都是单个文件下载,但是在实际的业务场景中,我们经常会遇到客户需要批量下载的场 ...
- 2018 南京预选赛 J Sum ( 欧拉素数筛 、Square-free Number、DP )
题目链接 题意 : 定义不能被平方数整除的数为 Square-free Number 定义 F(i) = 有几对不同的 a 和 b 使得 i = a * b 且 a .b 都是 Square-free ...
- 回文数二(acm训练)
问题 1161: [回文数(二)] 时间限制: 1Sec 内存限制: 128MB 提交: 133 解决: 51 题目描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数. ...
- K 短路
这种东西到现在才学-- 考虑 \(T\) 为根的最短路树,一条路径一定是树上边和非树边交错. 我们只管非树边,对于一条路径,非树边构成一个序列 \(L\),相邻两条路径 \(\left(u_1,v_1 ...