Django短信验证码
Django短信验证码
在阿里云中购买短信服务https://www.aliyun.com/
将短信验证码保存到redis中, 存取速度快,减轻mysql数据库服务器压力。
redis中的键可以设置过期时间, 短信验证码可以设置2分钟过期时间,过期自动销毁。
获取redis连接
# 导入redis连接方法
from django_redis import get_redis_connection
# 使用默认配置连接到redis
cnn = get_redis_connection('default')
# 使用连接上的方法操作redis
cnn.hset('对象名','属性' ,'值')
使用redis的命令
查看手册http://doc.redisfans.com/
封装两个方法:
发送手机短信的方法
# 发送手机验证码
def send_phone_code(request):""":param request: HttpRequest 请求对象:param phone: 手机号码:return: 返回结果"""try:# 获取手机号码phone = request.GET.get('phone')# 验证手机号是否正确phone_re = re.compile('^1[3-9]\d{9}$')res = re.search(phone_re, phone)if res:# 生成随机验证码code = "".join([str(random.randint(0, 9)) for _ in range(4)])print(code)print("===========================")# 保存到redis中 ,等你验证的时候使用r = get_redis_connection('default')r.set(tel, code)# 设置过期时间 redisr.expire(tel, 120)# 发送短信验证码__business_id = uuid.uuid1()# 信息params = "{\"code\":\"%s\"}" % coders = send_sms(__business_id, phone, "模板名称", "SMS_141905190", params)print(rs.decode('utf-8'))return {'ok': 1, 'code': 200}else:return {'ok': 0, 'code': 500, 'msg': '手机号码格式错误!'}except:return {'ok':0,'code':500,'msg':'短信验证码发送失败'}
发送的方法
# 发送短信
def send_sms(business_id, phone_numbers, sign_name, template_code, template_param=None):# 注意:不要更改REGION = "cn-hangzhou"PRODUCT_NAME = "Dysmsapi"DOMAIN = "dysmsapi.aliyuncs.com"# acs_client = AcsClient(const.ACCESS_KEY_ID, const.ACCESS_KEY_SECRET, REGION)acs_client = AcsClient(settings.ACCESSKEYID, settings.ACCESSKEYSECRET, REGION)region_provider.add_endpoint(PRODUCT_NAME, REGION, DOMAIN)smsRequest = SendSmsRequest.SendSmsRequest()# 申请的短信模板编码,必填smsRequest.set_TemplateCode(template_code)# 短信模板变量参数if template_param is not None:smsRequest.set_TemplateParam(template_param)# 设置业务请求流水号,必填。smsRequest.set_OutId(business_id)# 短信签名smsRequest.set_SignName(sign_name)# 数据提交方式# smsRequest.set_method(MT.POST)# 数据提交格式# smsRequest.set_accept_format(FT.JSON)# 短信发送的号码列表,必填。smsRequest.set_PhoneNumbers(phone_numbers)# 调用短信发送接口,返回jsonsmsResponse = acs_client.do_action_with_exception(smsRequest)# TODO 业务处理return smsResponse return smsResponse
创建视图函数并绑定路由
# 短信发送 视图函数
def sendMsg(request):return JsonResponse(send_phone_code(request))
# 8. 路由绑定
urlpatterns = [url(r'^sendMsg/$', sendMsg, name='sendMsg'), # 发短信
]
ajax 点击按钮 js 代码
{% block footer_js %}<script>$(function () {// 验证码按钮上绑定点击事件$(".yzm-hq").on('click', function () {// 由于this会在很多匿名函数中使用,先将其保存在一个变量中// 因为其他匿名函数中有自己的this,会和点击事件的this冲突var that = this;// 获取手机号码phone = $("input[name='phone']").val();// 通过ajax发送get请求$.get('{% url "sp_user:sendMsg" %}', {'phone': phone}, function (data) {//判断是否请求成功if (data.ok == 1) {// 设定 60 秒后可以重新发送验证码var time = 60;// 立马 将按钮禁用 防止重复点击提交$(that).attr('disabled', true);// 颜色设置为 灰色$(that).css({'backgroundColor': "gray"});// 将按钮提示文字改变showMsg(that, time);// 设置周期性执行, 周期性改变显示文字内容var timer = window.setInterval(function () {// 时间减少--time;// 显示文字showMsg(that, time);// 判断是否到期if (time == 0) {// 到期后清除定时器window.clearInterval(timer);// 启用按钮$(that).attr('disabled', false);// 改变颜色和文字内容$(that).css({'backgroundColor': "#76bb2a"});$(that).val("获取验证码");}}, 1000)} else {alert(data.msg);}})});//改变按钮 倒计时显示内容function showMsg(obj, time) {var msg = time + "秒后重新发送!";$(obj).val(msg);}})</script>
{% endblock %}
在RegisterView注册视图中验证提交的验证码核心代码
form表单中的核心验证验证码的代码
# 验证码字段添加
verify_code = forms.CharField(error_messages={"required": "请填写验证"})
# 单独使用一个方法校验 验证码
def clean_verify_code(self):# 验证验证码是否填写正确# 获取redis中的验证码r = get_redis_connection()tel = self.cleaned_data.get('phone')s_verify_code = r.get(tel)if not s_verify_code:raise forms.ValidationError("验证码已经过期")# 表单传入的验证码verify_code = self.cleaned_data.get('verify_code')# sid_verify_code = self.data.get('sid_verify_code')if int(verify_code) != int(s_verify_code):raise forms.ValidationError("验证码输入有误")return verify_code
Django短信验证码相关推荐
- Django博客系统(短信验证码)
1. 容联云短信平台操作 1.容联云官网 容联云通讯网址:容联云通讯_短信平台.手机验证码.语音验证码.IM即时通讯.云呼叫系统等互联网通信服务 注册并登陆 2.容联云管理控制台 3.添加容联云测试手 ...
- Django使用容联云发送短信验证码时提示:172001,网络错误
尝试用django连接容联云发送短信验证码,运行时出现了以下提示:{'172001':'网络错误'}:在网上查阅资料后得知,是因为python升级到2.7.9之后引入了一个新特性,当打开一个https ...
- Django项目后端实现注册功能---短信验证码(容联云)。
django项目gitee仓库地址:https://gitee.com/YANGYUE0205/meiduo_project.git 一, 总体逻辑分析. 要点: 1.为了避免用户使用图形验证码恶意测 ...
- Django电商项目(八)短信验证码的前后端实现
这篇文章我们开始完成短信验证码的前后端逻辑 后端逻辑 短信验证码接口设计 class SMSCodeView(View):"""短信验证码""&quo ...
- Django 使用短信验证码登录
实现页面效果 实现思路 当输入手机号时需要检测该手机号是否注册过,然后点击登录时一起将手机号和验证吗提交给后端,再次校验手机号和验证码. 这里使用form的方式将字段渲染再前端,在form中校验字段. ...
- 面试-Django实现注册短信验证码发送
注册的逻辑 注册需要的参数用户名,密码等,主要是图片验证码等输入 输入图片验证码之后,点击获得验证码,这时候要验证图片验证码的正确性 图片验证码正确才会发生短信,用户收到短信之后,输入后,点击注册就可 ...
- 【django】用户注册时短信验证码校验、避免频繁发送短信验证码【17】
注册时短信验证后端逻辑 class CheckSMScodeView(View):def get(self,request,phone):'''用户注册时短信验证码的校验功能:param reques ...
- Python全栈(十一)Django项目之3.图形验证码实现逻辑和短信验证码初步实现
文章目录 前言 一.图形验证码实现 1.图形验证码后端逻辑 2.图形验证码前端逻辑 二.短信验证码实现准备 1.短信验证码实现逻辑 2.容联云通讯短信平台 3.封装发送短信单例类 三.短信验证码后端逻 ...
- 美多商城之验证码(短信验证码2)
二.短信验证码 2.3 短信验证码后端逻辑 1. 短信验证码接口设计 1.请求方式 选项 方案 请求方法 GET 请求地址 /sms_codes/(?P<mobile>1[3-9]\d{9 ...
- 美多商城之验证码(短信验证码1)
二.短信验证码 2.1 短信验证码逻辑分析 知识要点 保存短信验证码是为注册做准备的. 为了避免用户使用图形验证码恶意测试,后端提取了图形验证码后,立即删除图形验证码. Django不具备发送短信的功 ...
最新文章
- 知乎热议:985 计算机视觉研究生找不到工作怎么办?
- 机器人 知乎碧桂园_从房地产大亨到跨界造“机器人”,碧桂园葫芦里卖着什么药?...
- MERGE INTO
- 阿里软件测试二面通过率,阿里测开一面二面三面hr面
- Python函数式编程简介(五)偏函数
- win102004优化_win10 2004系统电脑出现玩命运2掉帧的问题
- 如何在PHP开启gzip页面压缩实例
- 11.22Daily Scrum(2)
- js img转换base64
- ei eo eq什么意思_音响中的EQ是什么意思呀?
- CSS中常见的6种文本样式
- NAND Flash和NOR Flash的比较
- Maya中英文对照表(四)
- 那些漂亮的sci论文图一般用什么软件制作的?
- 大学计算机思维导图_3款免费在线思维导图网站,你一定要收藏一个!
- ADC信噪比计算公式
- 【逆向】【PE入门】使用PEView分析PE文件
- js对象扁平化:Javascript对象进行扁平化处理
- 130个资源网站,总有一个你用得着
- android6.0原生壁纸,惊呆了!安卓6.0壁纸竟然是这样得来的