Django验证码——手机注册登录
目录
二、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验证码——手机注册登录相关推荐
- 8、ABPZero系列教程之拼多多卖家工具 添加手机注册登录功能
现在网站基本都用手机注册,很少用邮箱注册,本篇内容比较多,代码我会尽量加备注,有些操作需要连续添加几个文件才不报错,如果VS显示错误,请继续后续步骤. 前面已经有一篇文章讲到集成短信发送模块:http ...
- 抖音实战~手机号验证码一键注册登录流程(限制手机终端登录)
文章目录 一.手机号+验证码 二.前端 2.1. 点击登陆流程 2.2. 点击登录源码 三.后端登录 3.1. 登录流程图 3.2. 流程简述 3.3. 手机号验证码登录流程 一.手机号+验证码 二. ...
- 手机短信验证码一键注册登录功能开发 2
1. 上一篇我们开发好了 短信验证码的发送功能, 接下来开发 我们的 一键登录注册功能 2. 有前端的视图我们可以看到, 传入的参数为手机号和验证码,我们用BO对其进行统一的封装,同时使用valid ...
- Django 可重用注册登录系统
文章目录 一.可重用注册登录系统 1.项目开始前的思考 2.搭建项目环境 3.设计数据库模型 1)数据库模型文件 2)设置数据库后端 3)注册app 4)生成迁移脚本并写入数据库 5)测试是否成功 6 ...
- python django 快速实现注册,登录,注销
临近年底,各种忙,好久没更新博客了,2017春节假期在即,距下班还有2小时,难得闲下来,来撸一手django简单的web注册,登录,注销. 环 境:centos 6.4 64bit python ...
- 手机短信验证码一键注册登录功能开发 1
1. 首先根据业务分析, 先要在前端填写我们的手机号, 发送短信验证码给我们的用户 对于我们后端来说, 发送验证码就是我们要开发的接口, 手机号就是我们传入的参数,然后就可以编写相应的代码了 @Api ...
- 最新web/java/jsp实现发送手机短信验证码的注册登录功能(秒嘀科技)
先来bb点废话,菜鸡本菜这两天在弄毕业设计,正好老师要求做手机号短信验证登录,自己也是上网搜的教程,但有几个地方值得记录一下. 网上大部分用的maven和idea来做,而我自己本身项目用的eclips ...
- 10- vue django restful framework 打造生鲜超市 -用户登录和手机注册(中)
Vue+Django REST framework实战 搭建一个前后端分离的生鲜超市网站 Django rtf 完成 手机注册和用户登录(中) Json Web Token的原理 因为我们的drf 的 ...
- 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增 ...
- django完成一个可重用注册登录系统
目录 可重用注册登录系统 项目开始前的思考 搭建项目环境 设计数据库模型 数据库模型文件 设置数据库后端 注册app 生成迁移脚本并写入数据库 测试是否成功 数据库模型后台管理 路由与视图函数框架构建 ...
最新文章
- stm32 IAP APP 相互跳转实验 (keil4 jlink STM32F407ZE
- NYOJ 589 糖果
- Java容器坐标起点_Java的屏幕坐标是以像素为单位,容器的左下角被确定为坐标的起点...
- Mysql数据库的读写分离
- [Nginx] – 性能优化 – 配置文件优化
- centos7安装浏览器
- 通过SpringAop、Filter对Request参数解密和对Response内容加密
- 438.找到字符串中所有字母异位词
- html文章标题加粗,织梦去除推荐文章标题加粗标签的方法
- 3DMax导出FBX文件贴图丢失
- 2021智能仓储物流之最全AGV企业供应商名录整理分享~
- 电脑文件怎么加密?第一种方法最简单
- 神奇的H5视频画中画功能
- LOB类型的学习、总结
- 计算机如何把文件设为隐藏,电脑如何显示隐藏的文件夹 电脑怎么设置隐藏文件夹...
- 现代密码学(六)——投币协议(Coin-Flipping by Phone)
- allow_url_fopen和allow_url_include详解
- 2014025640《大四实习》第*周学习总结
- npm ERR! code ERESOLVEnpm ERR! ERESOLVE could not resolvenpm ERR! npm ERR! While resolving: @vue/
- Fat32、NTFS、exFAT、HFS+、APFS文件系统的区别