django 通过ajax完成邮箱用户注册、激活账号的方法
本篇文章主要介绍了django 通过ajax完成邮箱用户注册、激活账号的方法,现在分享给大家,也给大家做个参考。一起过来看看吧
一、图片验证码
django-simple-captcha配置
1.在pycharm中,File====》Settings====》Project:项目名====》Project Interpreter====》+====》搜django-simple-captcha 选择0.55以上版本,然后点install package 按钮进行安装
2.项目名/urls.py中添加代码:
from django.urls import path,include ...... from users.views import IndexView ...... urlpatterns = [ ...... #配置验证码 path('captcha/',include('captcha.urls')), #首页url path('', IndexView.as_view(), name='index'), ...... ]
3.settings.py中添加一个注册信息
INSTALLED_APPS = [ ...... 'captcha' ]
4.打开终端Terminal执行更新数据库命令:
python manage.py makemigrations python manage.py migrate
5.在users目录下新建form.py文件:
from django import forms from captcha.fields import CaptchaField ...... class RegisterForm(forms.Form): """注册信息的验证""" ...... captcha=CaptchaField(error_messages={'invalid':'验证码错误'}) ......
6.在users/views.py中添加代码:
from users.form import RegisterForm class IndexView(View): """首页""" def get(self,request): register_form=RegisterForm() return render(request,'index.html',{'register_form':register_form})
7.在前端首页index.html中显示验证码、输入框
html
<p class="modal fade" id="register" tabindex="-1" role="dialog"> ...... <!--模态框中关于注册的内容start--> <p class="modal-body"> ...... <P><p style="display: inline-block;width:100px;text-align: center"><b >验证码:</b></p> <!--验证码start--> <p class="cap">{{ register_form.captcha }}</p> <!--验证码end--> </P> {% csrf_token %} </form> <p><p style="margin-left: 100px;background-color: orangered;width:150px;text-align: center"><b></b></p></p> </p> <!--模态框中关于注册的内容end--> ......
css
<style> .cap{ display: inline-block; width: 280px; height: 36px; } .cap img{ float: right; } </style>
js 跟刷新验证码相关(需要先引入jQuery)
$(function(){ $('.captcha').css({ 'cursor': 'pointer' }); /*# ajax 刷新*/ $('.captcha').click(function(){ console.log('click'); $.getJSON("/captcha/refresh/",function(result){ $('.captcha').attr('src', result['image_url']); $('#id_captcha_0').val(result['key']) }); }); })
二、ajax邮箱注册
1.在前端跟注册绑定的模态框代码写成:
html
<p class="modal fade" id="register" tabindex="-1" role="dialog"> ...... <p class="modal-body"> <form id="registerform" action="#" method="post"> <p> <p class="re-input"><b>用户名:</b></p> <input type="text" name="user" placeholder="用户名"> <p class="msg"><b id="user-msg"></b></p> </p> <p> <p class="re-input"><b>邮箱:</b></p> <input type="text" name="email" placeholder="邮箱"> <p class="msg"><b id="email-msg">2222</b></p> </p> <p> <p class="re-input"><b >密码:</b></p> <input type="password" name="pwd" placeholder="密码(不少于6位)"> <p class="msg"><b id="pwd-msg">222</b></p> </p> <p> <p class="re-input"><b >确认密码:</b></p> <input type="password" name="pwd2" placeholder="确认密码"> <p class="msg"><b id="pwd-msg2">22</b></p> </p> <P><p class="re-input"><b >验证码:</b></p> <p class="cap">{{ register_form.captcha }}</p> <p class="msg"><b id="captcha-msg">2</b></p> </P> {% csrf_token %} </form> <p><p style="margin-left: 100px;color: white;background-color: green;width:180px;text-align: center"><b id="active-msg"></b></p></p> ...... <button type="button" class="btn btn-primary" id="registerbtn">确认注册</button> ......
css
<style> .cap{ display: inline-block; width: 280px; height: 36px; } .cap img{ float: right; } .re-input{ display: inline-block; width:100px; text-align: center } .msg{ margin-left: 100px; background-color: orangered; width:180px; text-align: center } </style>
跟ajax注册相关的js代码:
$("#registerbtn").click(function() { $.ajax({ cache:false, type:"POST", url:"{% url 'users:register' %}", dataType:'json', data:$('#registerform').serialize(), //通过id找到提交form表单,并将表单转成字符串 async:true, //异步为真,ajax提交的过程中,同时可以做其他的操作 success:function (data) { //jquery3以后,会将回传过来的字符串格式的data自动json解析不用再使用一遍JSON.parse(data)了,不然反而会在控制台报错 if(data.status){ $('#active-msg').html(data.status); } else{ if(data.user){ username_msg=data.user.toString(); $('#user-msg').html('用户名'+ username_msg); } if(data.email){ email_msg=data.email.toString(); $('#email-msg').html('邮箱'+ email_msg); } if(data.pwd){ password_msg=data.pwd.toString(); $('#pwd-msg').html('密码'+ password_msg); } if(data.captcha){ captcha_msg=data.captcha.toString(); $('#captcha-msg').html(captcha_msg); } msg=data.__all__.toString(); $('#active-msg').html(msg); } } }); });
提升用户交互体验的js代码:
$("input").bind('input propertychange', function() { $('#login-fail').html(''); $('#user-msg').html(''); $('#email-msg').html(''); $('#pwd-msg').html(''); $('#pwd-msg2').html(''); $('#captcha-msg').html(''); });
2.users/form.py代码:(要验证的字段名跟前端input框的name值要保持一致!)
from django import forms from captcha.fields import CaptchaField from .models import UserProfile class RegisterForm(forms.Form): """注册信息的验证""" user = forms.CharField(required=True, error_messages={'required': '用户名不能为空.'}) email=forms.EmailField(required=True,error_messages={'required': '邮箱不能为空.'}) pwd = forms.CharField(required=True, min_length=6, error_messages={'required': '密码不能为空.', 'min_length': "至少6位"}) pwd2 = forms.CharField(required=True, min_length=6, error_messages={'required': '密码不能为空.', 'min_length': "至少6位"}) captcha=CaptchaField(error_messages={'invalid':'验证码错误'}) def clean(self): '''验证两次密码是否一致''' p1=self.cleaned_data.get('pwd') p2=self.cleaned_data.get('pwd2') if p1!=p2: raise forms.ValidationError('两次输入密码不一致') else: return self.cleaned_data
3.users/views.py中与注册相关的代码:
...... from django.http import HttpResponse from .models import UserProfile,ShopProfile from users.form import RegisterForm from django.contrib.auth.hashers import make_password import json class RegisterView(View): """邮箱注册""" def post(self, request): register_form=RegisterForm(request.POST) if register_form.is_valid(): user_name=request.POST.get('user','') email=request.POST.get('email','') pass_word=request.POST.get('pwd','') u=UserProfile.objects.filter(username=user_name).count() e=UserProfile.objects.filter(email=email).count() if u or e: return HttpResponse('{"status":"该用户名或邮箱已被占用!"}') else: user_profile=UserProfile() user_profile.username=user_name user_profile.email=email user_profile.password=make_password(pass_word) user_profile.is_active=False user_profile.save() return HttpResponse('{"status":"注册成功请去邮箱激活!"}') msg=register_form.errors msg=json.dumps(msg) return HttpResponse(msg)
4.配置users/urls.py注册路由:
...... from .views import RegisterView ..... urlpatterns = [ ...... path('register/',RegisterView.as_view(),name='register'), ...... ]
三、邮箱激活已注册的账号:
1.新建个数据表存放邮箱激活码:
在users/models.py中增加代码:
class EmailVerifyRecord(models.Model): """邮箱激活码""" code=models.CharField(max_length=20,verbose_name='验证码') email=models.EmailField(max_length=50,verbose_name='邮箱') send_type=models.CharField(verbose_name='验证码类型',choices=(('register','注册'),('forget','忘记密码')), max_length=20) send_time=models.DateTimeField(verbose_name='发送时间',default=datetime.now) class Meta: verbose_name='邮箱验证码' verbose_name_plural=verbose_name def __str__(self): return '{0}({1})'.format(self.code,self.email)
在users/adminx.py中注册数据表:
...... from .models import EmailVerifyRecord ...... class EmailVerifyRecordAdmin(object): list_display = ['code', 'email', 'send_type', 'send_time'] search_fields = ['code', 'email', 'send_type'] list_filter = ['code', 'email', 'send_type', 'send_time'] ...... xadmin.site.register(EmailVerifyRecord,EmailVerifyRecordAdmin)
打开终端Terminal执行更新数据库命令:
python manage.py makemigrations python manage.py migrate
2.写发邮件的脚本:在apps/users/新建utils/email_send.py
from random import Random from users.models import EmailVerifyRecord from django.core.mail import send_mail from xyw.settings import EMAIL_FROM def random_str(randomlength=8): str='' chars='AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789' length=len(chars)-1 random=Random() for i in range(randomlength): str+=chars[random.randint(0,length)] return str def send_register_email(email,send_type='register'): email_record=EmailVerifyRecord() code=random_str(16) email_record.code=code email_record.email=email email_record.send_type=send_type email_record.save() email_title='' email_body='' if send_type=='register': email_title='雪易网注册激活链接' email_body='请点击下面的链接激活你的账号:http://127.0.0.1:8000/active/{0}'.format(code) send_status=send_mail(email_title,email_body,EMAIL_FROM,[email]) if send_status: pass elif send_type=='forget': email_title = '雪易密码重置链接' email_body = '请点击下面的链接重置你的密码:http://127.0.0.1:8000/reset/{0}'.format(code) send_status = send_mail(email_title, email_body, EMAIL_FROM, [email]) if send_status: pass
3.在settings.py中追加发送邮件的配置代码:
EMAIL_HOST='smtp.sina.cn' EMAIL_PORT=25 EMAIL_HOST_USER='xxxxxxxx@sina.cn' #你的邮箱 EMAIL_HOST_PASSWORD='********' EMAIL_USE_TLS=False EMAIL_FROM='xxxxxxx1@sina.cn' #同样是你的邮箱,跟上面都是发信者邮箱 #我用的新浪的,也可以用别的
4.开启新浪邮箱的smtp服务,不然不能自动发邮件的,步骤如下:
登录新浪邮箱====》设置区====》客户端pop/imp/smtp====》Pop3/SMTP服务====》服务状态:开启====》保存
5.增加激活功能
在users/views.py中增加激活类ActiveUserView(View)代码:
...... from .models import EmailVerifyRecord ...... class ActiveUserView(View): """激活账户""" def get(self,request,active_code): all_records=EmailVerifyRecord.objects.filter(code=active_code) if all_records: for record in all_records: email=record.email user=UserProfile.objects.get(email=email) user.is_active=True user.save() return render(request,'index.html')
6.在users/views.py中
对注册类 RegisterView(View)增加发送激活邮件的代码:
...... from apps.utils.email_send import send_register_email ...... class RegisterView(View): """邮箱注册""" def post(self, request): ...... user_profile.save() #发送邮件代码start send_register_email(email,'register') #发送邮件代码end return HttpResponse('{"status":"注册成功请去邮箱激活!"}')
对登录LoginView(View)增加验证账户激活与否的代码:
class LoginView(View): """用户登录""" def post(self,request): user_name=request.POST.get("username","") pass_word=request.POST.get("pwd","") user=authenticate(username=user_name,password=pass_word) if user is not None: #验证账户是否已经激活start if user.is_active: login(request,user) return HttpResponse('{"status":"success"}') else: return HttpResponse('{"status":"fail","msg":"账户未激活"}') #验证账户是否已经激活end else: return HttpResponse('{"status":"fail","msg":"用户名或密码错误"}')
至此完成了用邮箱注册及激活,很多时候,激活邮件都会被邮箱自动放入垃圾箱,而且从邮件点击激活链接的时候,还会被提示一些警告信息,可以说通过邮箱注册各种不如通过短信注册,但是……省钱啊!^_^
相关推荐:
以上是django 通过ajax完成邮箱用户注册、激活账号的方法的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

本文提供了一份详细的Gate.io新手注册教程,涵盖了从访问官网到完成注册的每一个步骤,包括填写注册信息、进行验证、阅读用户协议等。文章还强调了注册成功后的安全措施,如设置二次验证和完成实名认证,并给出了新手提示,帮助用户安全地开启数字资产交易之旅。

这篇文章为新手提供了详细的Gate.io注册教程,指导他们逐步完成注册流程,包括访问官网、填写信息、身份验证等,并强调了注册后的安全设置。此外,文章还提到了币安、欧易和芝麻开门等其他交易所,建议新手根据自身需求选择合适的平台,并提醒读者数字资产投资具有风险,应理性投资。

详细介绍芝麻开门交易所网页版登入口操作,含登录步骤、找回密码流程,还针对登录失败、无法打开页面、收不到验证码等常见问题提供解决方法,助你顺利登录平台。

Laravel邮件发送失败时的退信代码获取方法在使用Laravel开发应用时,经常会遇到需要发送验证码的情况。而在实�...

本文提供了一份详细的Gate.io网页版最新注册教程,帮助用户轻松入门数字资产交易。教程涵盖了从访问官网到完成注册的各个步骤,并强调了注册后的安全设置。文章还简单介绍了币安、欧易和芝麻开门等其他交易平台,建议用户根据自身需求选择合适的平台,并注意投资风险。

OKX 欧易是一个领先的加密货币交易平台。本文将提供详细的步骤,指导您如何注册 OKX 欧易官方网站账户。您将了解如何访问官方网站、选择注册方式、填写必要信息并完成注册过程。文中还包含有关注意事项的信息,例如使用真实个人信息并设置强密码的重要性。

本指南提供了 Bitget 交易所官方 App 的详细下载和安装步骤,适用于安卓和 iOS 系统。指南整合了来自多个权威来源的信息,包括官网、App Store 和 Google Play,并强调了下载和账户管理过程中的注意事项。用户可以从官方渠道下载 App,包括应用商店、官网 APK 下载和官网跳转,并完成注册、身份验证和安全设置。此外,指南还涵盖了常见问题和注意事项,例如
