目录

二、html代码

三、后端

1、forms.py

2.views.py

3.urls.py


django+celery使用阿里云短信服务异步发送注册验证码_徳-CSDN博客网站注册时通常都会使用短信验证码,以防止机器恶意注册网站,阿里云短信服务是国内较大的短信服务平台,使用阿里云短信服务实现验证码发送也是非常的简单,相关文档:https://helpcdn.aliyun.com/document_detail/59210.html,python发送短信验证码文档:https://help.aliyun.com/document_detail/55491.html。...https://blog.csdn.net/weixin_44951273/article/details/101221742django-实现登录短信验证_子钦加油的博客-CSDN博客功能演示核心任务前端功能:点击按钮Ajax调用发送验证码功能输完验证码后Ajax调用验证功能后端功能:功能1:发送验证码功能功能2:验证码检查后台核心逻辑(不需要手写)功能3:发短信功能4:生成短信验证码(随机生成6位数字)集成Redis使用Redis代替session缓存, 存储数据!Redis集成到Django中!...https://blog.csdn.net/weixin_37557729/article/details/107011998

二、html代码

<div class="modal-body"><form class="container" id="loginform"><div class="form-group row"><div class="col-sm-1"></div><label class="col-sm-3 col-form-label">手机号码</label><div class="col-sm-7 "><input type="number" class="form-control form-control-sm" id="mobile" name="mobile"placeholder="号码"></div></div><div class="form-group row"><div class="col-sm-1"></div><label class="col-sm-3 col-form-label">短信验证</label><div class="col-sm-7"><div class="input-group input-group-sm"><input type="text" class="form-control" id="captcha" name="captcha"><span class="input-group-append"><button type="button" class="btn btn-info btn-flat" id="captchabtn" onclick="sendcaptcha()">发送验证码</button></span></div></div></div><div class="form-group row"><div class="col-sm-1"></div><label class="col-sm-3 col-form-label">用户名称</label><div class="col-sm-7"><input type="text" class="form-control form-control-sm" id="username" name="username"placeholder="姓名"></div></div><div class="form-group row"><div class="col-sm-1"></div><label class="col-sm-3 col-form-label">登录密码</label><div class="col-sm-7"><input type="password" class="form-control form-control-sm" id="password1" name="password1"placeholder="请输入密码"></div></div><div class="form-group row"><div class="col-sm-1"></div><label class="col-sm-3 col-form-label">重新输入</label><div class="col-sm-7"><input type="password" class="form-control form-control-sm" id="password2" name="password2"placeholder="再次输入密码"></div></div></form><!-- /.card-body --></div><div class="modal-footer justify-content-between"><div id="loginerror" class="text-danger"></div><button type="button" class="btn btn-info" onclick="login()">注册账号</button></div><!--编辑数据--><script>/* 倒计时效果函数 */function SmsTimer() {// 将标签设置为不可点击的// jquery 的变量一般以 $ 开头var $btnEle = $('#captchabtn');$btnEle.attr("disabled",true);// 设置定时器读秒效果和标签文本内容的修改var timer = 60;var t = setInterval(function () {$btnEle.text(`${timer}秒后重新发送`);timer--;// 如果小于0就将定时器清除并且将$btnEle设置为可操作if (timer <= 0) {clearInterval(t);$btnEle.text('发送验证码');$btnEle.attr('disabled', false);}},1000 // 1秒中执行一次这个函数)}/* 发送手机短信验证码 */function sendcaptcha() {var mobile = $('#mobile').val();var mobilereg = /^(0|86|17951)?(13[0-9]|15[012356789]|17[0-8]|18[0-9]|14[5679]|19[189]|16[56])[0-9]{8}$/;if (mobile.length == 11 &&  mobilereg.test(mobile)) {$.ajax({url: '{% url 'onworker' %}' + '?type=captcha',type:'post',data: {'mobile': mobile,},success: function (data) {if (data['status'] === 'success'){SmsTimer()}else {alert('未成')}}})}else {alert('手机号码错误')}}/* 注册 */function login() {var formobj = document.getElementById("loginform");var dic = new FormData(formobj);// 调用 ajax 与后端交换数据$.ajax({url: '{% url 'onworker' %}' + '?type=login',type: 'post',data: dic,catch: false,processData: false, // tell jquery not to process the datacontentType: false, // tell jquery not to set contentTypesuccess: function (data) {if (data['status'] === 'success') {$('#search_job').val('uninducte').trigger("change");search(1);$('#modal-login').modal('hide');alert('成功');} else {{#alert(data['error']);#}console.log(data['error']);$('#loginerror').html(data['error']);}},error: function (xhr) {alert('输入错误')console.log(xhr)}})}</script>

三、后端

1、forms.py

from django import forms
from django.core.cache import cachefrom .models import UserProfile,Project_name,Company_name,Project_position
from django.contrib import auth
import reclass RegisterForm(forms.Form):username = forms.CharField(label='用户名', max_length=30, min_length=2)mobile = forms.CharField(label='手机号', min_length=11, error_messages={"invalid": u"号码错误"})captcha = forms.CharField(label='验证码', min_length=4, max_length=4, error_messages={"invalid": u"验证码错误"})password1 = forms.CharField(label='密码', min_length=6)password2 = forms.CharField(label='再次输入密码', min_length=6, error_messages={"invalid": u"两次输入不一致"})# Use clean methods to define custom validation rulesdef clean_mobile(self):mobile = self.cleaned_data['mobile']captcha = self.cleaned_data['captcha']if UserProfile.objects.filter(mobile=mobile).exists():raise forms.ValidationError(u"手机号码已存在")else:if cache.has_key(mobile):oldcaptcha = cache.get(mobile)print(str(captcha))print(1111)print(str(oldcaptcha))if str(captcha) != str(oldcaptcha):raise forms.ValidationError(u"验证码错误")return mobiledef clean_password2(self):password1 = self.cleaned_data['password1']password2 = self.cleaned_data['password2']if password2 != password1:raise forms.ValidationError('两次输入密码不一致')return password2

2.views.py


class Onworker(View):# 在职人员def get(self, request):companys = Company_name.objects.all()projects = Project_name.objects.filter(state='yes')users = UserProfile.objects.all().order_by('-id')  # filter(Q(username=username) & Q(phone=username))content = {}content['projects'] = projectscontent['users'] = userscontent['companys'] = companysreturn render(request, 'userresources/hr_onworker.html', content)def post(self, request):code = random.randrange(1000, 9999)  # 随机生成四位数验证码type = request.GET.get('type')if type == 'captcha':res = {}mobile = request.POST.get('mobile')try:Captcha.main([mobile, code])cache.set(mobile, code, 120)  # 该值的有效期为20sres['status'] = 'success'except Exception as e:print(e)res['status'] = 'error'return JsonResponse(res)if type == 'login':res = {}form = RegisterForm(request.POST)if form.is_valid():try:username = form.cleaned_data['username']mobile = form.cleaned_data['mobile']password = form.cleaned_data['password2']user_profile = UserProfile()user_profile.username = usernameprint(mobile)user_profile.mobile = mobileuser_profile.password = make_password(password)user_profile.save()res['status'] = 'success'except Exception as e:logger.error(e)res['error'] = '注册失败,请重试'else:error = form.errors.get_json_data()print(error)if error.get('mobile', None):res['error'] = error.get('mobile', None)[0]['message']if error.get('password2', None):res['error'] = error.get('password2', None)[0]['message']if error.get('captcha', None):res['error'] = error.get('captcha', None)[0]['message']return JsonResponse(res)

3.urls.py


from django.urls import path
from .views import Hrdesktop,OnescreenView,Toworker,Onworker,OnworkChart,Induction,ContractManage,ProjectnameView,Projectpostion,RecruitView,ProcedureView,InterviewView,ReserveViewurlpatterns = [# 办事管理# 人才招聘# 人员管理path('manage/ontoworker/', Onworker.as_view(), name='onworker'),# 人事异动# 社保公积金
]

Django验证码——手机注册登录相关推荐

  1. 8、ABPZero系列教程之拼多多卖家工具 添加手机注册登录功能

    现在网站基本都用手机注册,很少用邮箱注册,本篇内容比较多,代码我会尽量加备注,有些操作需要连续添加几个文件才不报错,如果VS显示错误,请继续后续步骤. 前面已经有一篇文章讲到集成短信发送模块:http ...

  2. 抖音实战~手机号验证码一键注册登录流程(限制手机终端登录)

    文章目录 一.手机号+验证码 二.前端 2.1. 点击登陆流程 2.2. 点击登录源码 三.后端登录 3.1. 登录流程图 3.2. 流程简述 3.3. 手机号验证码登录流程 一.手机号+验证码 二. ...

  3. 手机短信验证码一键注册登录功能开发 2

    1. 上一篇我们开发好了 短信验证码的发送功能, 接下来开发 我们的 一键登录注册功能 2. 有前端的视图我们可以看到, 传入的参数为手机号和验证码,我们用BO对其进行统一的封装,同时使用valid ...

  4. Django 可重用注册登录系统

    文章目录 一.可重用注册登录系统 1.项目开始前的思考 2.搭建项目环境 3.设计数据库模型 1)数据库模型文件 2)设置数据库后端 3)注册app 4)生成迁移脚本并写入数据库 5)测试是否成功 6 ...

  5. python django 快速实现注册,登录,注销

    临近年底,各种忙,好久没更新博客了,2017春节假期在即,距下班还有2小时,难得闲下来,来撸一手django简单的web注册,登录,注销. 环   境:centos 6.4 64bit python ...

  6. 手机短信验证码一键注册登录功能开发 1

    1. 首先根据业务分析, 先要在前端填写我们的手机号, 发送短信验证码给我们的用户 对于我们后端来说, 发送验证码就是我们要开发的接口, 手机号就是我们传入的参数,然后就可以编写相应的代码了 @Api ...

  7. 最新web/java/jsp实现发送手机短信验证码的注册登录功能(秒嘀科技)

    先来bb点废话,菜鸡本菜这两天在弄毕业设计,正好老师要求做手机号短信验证登录,自己也是上网搜的教程,但有几个地方值得记录一下. 网上大部分用的maven和idea来做,而我自己本身项目用的eclips ...

  8. 10- vue django restful framework 打造生鲜超市 -用户登录和手机注册(中)

    Vue+Django REST framework实战 搭建一个前后端分离的生鲜超市网站 Django rtf 完成 手机注册和用户登录(中) Json Web Token的原理 因为我们的drf 的 ...

  9. springboot整合redis之用户手机验证码注册登录

    目录 1搭建项目开发环境 1.1安装redis 1.1.1下载redis 1.1.2安装redis 1.1.3设置redis为windows服务 安装为windows服务 1.2启动idea 1.3增 ...

  10. django完成一个可重用注册登录系统

    目录 可重用注册登录系统 项目开始前的思考 搭建项目环境 设计数据库模型 数据库模型文件 设置数据库后端 注册app 生成迁移脚本并写入数据库 测试是否成功 数据库模型后台管理 路由与视图函数框架构建 ...

最新文章

  1. stm32 IAP APP 相互跳转实验 (keil4 jlink STM32F407ZE
  2. NYOJ 589 糖果
  3. Java容器坐标起点_Java的屏幕坐标是以像素为单位,容器的左下角被确定为坐标的起点...
  4. Mysql数据库的读写分离
  5. [Nginx] – 性能优化 – 配置文件优化
  6. centos7安装浏览器
  7. 通过SpringAop、Filter对Request参数解密和对Response内容加密
  8. 438.找到字符串中所有字母异位词
  9. html文章标题加粗,织梦去除推荐文章标题加粗标签的方法
  10. 3DMax导出FBX文件贴图丢失
  11. 2021智能仓储物流之最全AGV企业供应商名录整理分享~
  12. 电脑文件怎么加密?第一种方法最简单
  13. 神奇的H5视频画中画功能
  14. LOB类型的学习、总结
  15. 计算机如何把文件设为隐藏,电脑如何显示隐藏的文件夹 电脑怎么设置隐藏文件夹...
  16. 现代密码学(六)——投币协议(Coin-Flipping by Phone)
  17. allow_url_fopen和allow_url_include详解
  18. 2014025640《大四实习》第*周学习总结
  19. npm ERR! code ERESOLVEnpm ERR! ERESOLVE could not resolvenpm ERR! npm ERR! While resolving: @vue/
  20. Fat32、NTFS、exFAT、HFS+、APFS文件系统的区别

热门文章

  1. 前端数据可视化之使用 canvas、svg、zrender画图
  2. 题目9:身高排序(绝对差值)
  3. python摄像头动作捕捉_为动作捕捉设备写MOTIONBUILDER插件
  4. 烟雾检测模块ADPD188BI介绍与应用(一)
  5. NI-9253 C系列电流输入模块-9253
  6. 操作系统-信号量机制;用信号量机制实现进程互斥、同步、前驱关系
  7. Java中resualtset,@Result type = 'stream
  8. 微信头像制作小程序源码
  9. 对文本简单加密解密算法
  10. 关于LinkList和LNode*