在user文件夹下新建python包,utils

在包内新建文件email_send.py,其中包括验证字符串随机码的产生,数据库的存储和email的发送

# -*- coding: utf-8 -*-
# 作者:神秘藏宝室
# 日期:2019/1/1 22:21
from random import Random
from django.core.mail import send_mailfrom users.models import EmailVerifyRecord
from waaaxWeb.settings import EMAIL_FROMdef random_str(randomlength=8):str = ''chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'length = len(chars) - 1random = Random()for i in range(randomlength):str += chars[random.randint(0, length)]return strdef send_registr_email(email, sendtpye='register'):email_record = EmailVerifyRecord()code = random_str(16)email_record.code = codeemail_record.email = emailemail_record.send_type = sendtpyeemail_record.save()email_title = ''email_body = ''if sendtpye == 'register':email_title = u'维可思电子网注册激活链接'email_body = u'请点击下面的链接激活您的账号:http://127.0.0.1:8000/active/{0}'.format(code)send_status = send_mail(email_title, email_body, EMAIL_FROM, [email])return send_status

因为用到发送email需要在settings下设置EMAIL的属性

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp-mail.outlook.com'                       #SMTP地址 例如: smtp.163.com
EMAIL_PORT = 25                       #SMTP端口 例如: 25
EMAIL_HOST_USER = 'waaax@outlook.com'                  #qq的邮箱 例如: xxxxxx@163.com
EMAIL_HOST_PASSWORD = ''              #我的邮箱密码 例如  xxxxxxxxx
EMAIL_SUBJECT_PREFIX = u'django'       #为邮件Subject-line前缀,默认是'[django]'
EMAIL_USE_TLS = True                  #与SMTP服务器通信时,是否启动TLS链接(安全链接)。默认是false
EMAIL_FROM = 'waaax@outlook.com'

调试下正常注册可以收到email验证了

修改views下的跳转逻辑

class RegisterView(View):def get(self, request):register_form = RegisterForm()return render(request, 'register.html', {'register_form':register_form})def post(self, request):register_form = RegisterForm(request.POST)if register_form.is_valid():user_name = request.POST.get("email", "")pass_word = request.POST.get("password", "")user_profile = UserProfile()user_profile.username = user_nameuser_profile.email = user_nameuser_profile.password = make_password(pass_word)user_profile.save()status = send_registr_email(user_name, 'register')if status:return render(request, "login.html")else:return render(request, "register.html", {"msg": u"发送邮件失败!"})else:return render(request, "register.html", {"register_form": register_form})

修改register.html内的错误提示

<div class="error btns" id="jsEmailTips">{% for key,error in register_form.errors.items %} {{ error }} {% endfor %}{{ msg }}</div>

修改输入框的错误提示

<div class="form-group marb20 {% if register_form.errors.email %}errorput{% endif %}"><label>邮&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;箱</label><input  type="text" id="id_email" name="email" value="{{ register_form.email.value }}" placeholder="请输入您的邮箱地址" /></div><div class="form-group marb8 {% if register_form.errors.password %}errorput{% endif %}"><label>密&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;码</label><input type="password" id="id_password" name="password"  value="{{ register_form.password.value }}" placeholder="请输入6-20位非中文字符密码" /></div><div class="form-group marb8 captcha1 {% if register_form.errors.captcha %}errorput{% endif %}"><label>验&nbsp;证&nbsp;码</label>{{ register_form.captcha }}</div>

增加邮箱激活功能,首先要修改注册时候is_active的初始值为未激活

class RegisterView(View):def get(self, request):register_form = RegisterForm()return render(request, 'register.html', {'register_form':register_form})def post(self, request):register_form = RegisterForm(request.POST)if register_form.is_valid():user_name = request.POST.get("email", "")pass_word = request.POST.get("password", "")user_profile = UserProfile()user_profile.username = user_nameuser_profile.email = user_nameuser_profile.password = make_password(pass_word)user_profile.is_active = Falseuser_profile.save()status = send_registr_email(user_name, 'register')if status == 1:return render(request, "login.html")else:return render(request, "register.html", {"msg": u"发送邮件失败!"})else:return render(request, "register.html", {"register_form": register_form})

新建一个激活用的view类AciveUserView

class AciveUserView(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.emailuser = UserProfile.objects.get(email=email)user.is_active = Trueuser.save()return render(request, 'login.html')

增加urls

url(r'^active/(?P<active_code>.*)/$', AciveUserView.as_view(), name="user_acive"),

这样当访问邮箱收到的激活链接时候就会改变激活状态,然后跳转到登陆界面

重新修正登陆要求,必须激活

class LoginView(View):def get(self, request):return render(request, 'login.html', {})def post(self, request):login_form = LoginForm(request.POST)if login_form.is_valid():user_name = request.POST.get("username", "")pass_word = request.POST.get("password", "")user = authenticate(username=user_name, password=pass_word)if user is not None:if user.is_active:login(request, user)return render(request, "index.html")else:return render(request, "login.html", {"msg": u"用户未激活"})else:return render(request, "login.html", {"msg": u"用户名或者密码错误!"})else:return render(request, "login.html", {"login_form": login_form})

OK!已经可以正确显示未激活状态 ,对激活链接进行激活 和 激活直接登陆

转载于:https://www.cnblogs.com/Mysterious/p/10206575.html

django 增加验证邮箱功能相关推荐

  1. Jsoup+JavaMail实现自动投票,验证邮箱功能

    前几天,突然接到boss任务,说客户要在手机上,实现一个自动投票的功 能.而且要一天搞出来.让暴风雨来的更猛烈吧!加班的节奏吗? 虽然是个小工具,但是麻雀虽小,五脏俱全.首先,先拆分下自动投票的需求, ...

  2. [个人网站搭建]·Django增加评论功能(Python3)

    [个人网站搭建]·Django增加评论功能 个人主页--> https://xiaosongshine.github.io/ 个人网站搭建github地址:https://github.com/ ...

  3. Django项目实战——7—(openid是否绑定用户的处理、用户基本信息渲染、添加和验证邮箱)

    1.openid是否绑定用户的处理 判断openid是否绑定过用户 使用openid查询该QQ用户是否在商城中绑定过用户. try:oauth_user = OAuthQQUser.objects.g ...

  4. Django项目实战——8—(判断用户是否登录并返回JSON、Django发送邮件的配置、生成邮箱验证链接、验证邮箱后端逻辑)

    1.判断用户是否登录并返回JSON 重要提示: 只有用户登录时才能让其绑定邮箱. 此时前后端交互的数据类型是JSON,所以需要判断用户是否登录并返回JSON给用户. 方案一: 使用Django用户认证 ...

  5. django excel 导出页面_Django Admin中增加导出Excel功能过程解析

    在使用Django Admin时, 对于列表我们有时需要提供数据导出功能, 如下图: 增加导出Excel功能 在Django Admin中每个模型的Admin类(继承至admin.ModelAdmin ...

  6. php 怎么验证邮箱验证码,PHP实现邮箱验证码验证功能

    标签:邮箱验证   登录   格式   tar   程序   body   用户名   实现   include *文章来源:https://blog.egsec.cn/archives/623  ( ...

  7. 04——驾校科目一考试——登录窗口的功能(验证邮箱地址)

    文章目录 登录相应功能实现 正式编程 验证输入的是否是合法的邮箱地址 完整代码 正确输入 错误输入 下一篇 登录相应功能实现 当我们点击登录按钮的时候需要对账号和密码进行验证.我们需要提前准备好了所有 ...

  8. 美多商城之用户中心(添加和验证邮箱)

    二.添加和验证邮箱 2.1 添加邮箱后端逻辑 1. 添加邮箱接口设计和定义 1.请求方式 选项 方案 请求方法 PUT 请求地址 /emails/ # 添加邮箱url(r'^emails/$', vi ...

  9. php 验证url,php过滤器filter验证邮箱、url和ip地址等

    1.验证邮箱 复制代码 代码示例: $email = 'sjlinyu@qq.com'; $result = filter_var($email, FILTER_VALIDATE_EMAIL); va ...

最新文章

  1. insightface mxnet训练horovod版
  2. [Ynoi2019模拟赛]Yuno loves sqrt technology II
  3. WebServices中使用cxf开发日志拦截器以及自定义拦截器
  4. joomla建站-双语CMS系统开发的实现
  5. .NET Core使用NPOI导出复杂Word详解
  6. 【6】C++语法与数据结构之STL_list学生管理系统_链表外排序_函数指针
  7. Centos7 Docker私有仓库搭建
  8. Spring 常见问题( 持续更新... ... )
  9. HTML中的select只读
  10. 2020网络安全NISP一级题库
  11. 雷达干扰技术(四)雷达信号处理
  12. 9106w android7,三星note4 SM-N9106W原厂刷机包4.4.4/5.0.1rom线刷包Root驱动
  13. Shopee店铺爆单赚钱核心方法!跨境商家必学技能(干货建议收藏)
  14. 那些散落在人间的天使
  15. 《一》注册订阅号并完成基本配置
  16. javax.mail.MessagingException: Could not connect to SMTP host: smtp.163.com, port: 465;
  17. 关于配置tft液晶屏时,屏幕不显示遇到的问题
  18. 汉明码纠错java_汉明码纠错的基本原理及优化解决方案
  19. 批量导入Sql数据库
  20. 8*8LED点阵图原理(74HC595芯片使用方法)

热门文章

  1. 【转】ibatis的简介与初步搭建应用
  2. elasticsearch分布式搜索配置文件详解
  3. 使用dd命令复制ASM磁盘的spfile
  4. ORA-19809: 超出了恢复文件数的限制
  5. [ZT]SQL Server 的事务日志意外增大或充满的处理方法
  6. Webhooks上的一个简单方法:恐吓现在停止
  7. 如何在您HTML中嵌入视频和音频
  8. java 并发统计_java并发编程|CountDownLatch计数器
  9. 什么业务场景适合使用Redis?
  10. 【TeeChart Pro ActiveX教程】(八):ADO数据库访问(上)