在用django开发项目时,会用到注册账号发送邮箱来激活账号或接收手机验证码。

本篇博客写发送邮箱验证码,后续写发送手机验证码。

首先可以配置邮箱的一些必须的参数等
如,张三来注册 x 网站,邮箱是zhangsan@163.com,那么这个邮箱会收到激活链接,那么给他发送链接的邮箱是什么,需要我们 自己配置,在全局的settings.py中

EMAIL_HOST = 'smtp.163.com'  # 163邮箱的 SMTP 地址EMAIL_PORT = 25     # SMTP端口EMAIL_HOST_USER = 'huamuxiong_2018@163.com'       # 我自己的邮箱EMAIL_HOST_PASSWORD = '****************'       # 我的邮箱授权码EMAIL_SUBJECT_PREFIX = '[huamuxiong]'     # 为邮件Subject-line前缀,默认是'[django]'EMAIL_USE_TLS = False   # 与SMTP服务器通信时,是否启动TLS链接(安全链接)。默认是falseEMAIL_FROM = 'huamuxiong_2018@163.com'  # 与 EMAIL_HOST_USER 相同

授权码获取方式:


前期工作:
写验证码的models

# 邮箱--用来激活账号和找回密码
class EmailPro(models.Model):code = models.CharField(max_length=20, verbose_name='验证码')email = models.EmailField(max_length=50, verbose_name='邮箱')send_type = models.CharField(max_length=10, choices=(('register', '邮箱注册'), ('forget', '忘记密码')), verbose_name='发送类型')send_time = models.DateTimeField(auto_now_add=True, verbose_name='发送时间')class Meta:db_table='emailpro'verbose_name='邮箱验证码'verbose_name_plural=verbose_name

生成随机验证码的函数:
randomlength:生成多少位的字符串,默认是 8 位

from random import Random
# 随机生成字符串
def random_str(randomlength=8):str = ''chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'length = len(chars)-1random = Random()for i in range(randomlength):str += chars[random.randint(0, length)]return str   # 将拼接的字符串返回

写发送邮箱的函数:

from django.core.mail import send_mailfrom index.models import EmailPro
from rentingHouse.settings import EMAIL_FROM  # 项目名称为 rentingHouse# 接收两个参数,一个邮箱,另一个是发送类型,注册或忘记密码
def send_register_email(email, send_type='register'):  # 类型为注册email_recode = EmailPro()code = random_str(16)  # 生成16位的随机字符串email_recode.code = codeemail_recode.email = emailemail_recode.send_type = send_typeemail_recode.save()email_title = ''email_body = ''if send_type == 'register':email_title = '注册激活链接'email_body = '请点击下方的链接激活你的账号:http://127.0.0.1:8000/active/{0}'.format(code)else:pass  # 忘记密码--暂时不写send_status = send_mail(email_title, email_body, EMAIL_FROM, [email])  # 注释 ①if send_status:pass

注释 ①:
看一下必传的四个参数:
subject: 主题,也就是 标题 title
message:消息,也就是 内容 body
from_email:发送的邮箱 配置中的 EMAIL_FROM
recipient_list:收件人清单,要求是列表 ,[email1, email2,…],只有一个的话也是列表[email]

send_mail会返回一个结果,可对结果做简单的处理,这里不写

def send_mail(subject, message, from_email, recipient_list,fail_silently=False, auth_user=None, auth_password=None,connection=None, html_message=None):

在注册时,让 isActice 设置为False,即不激活

...  # 验证邮箱是否存在,两次密码是否一致等,直接简写了
email = request.POST.get('email', '')
password = request.POST.get('password', '')
password = make_password(password)  # 密码加密# 将注册信息添加到数据库的user表中
obj = User(email=email, username=username, password=password, isActive=False)
obj.save()
send_register_email(email, 'register')  # 调用发送邮件的方法

注册页面,使用leyton01@protonmail.com邮箱注册

登陆protonmail邮箱查看一下

显示的是一个主题 title 和 发送者邮箱
点进去看一下

由于未搭建服务器, 所以暂时还是本地地址 127.0.0.1

在登陆时根据isActive是否为True来判断账号是否被激活,上述说到False为没激活
False —> 0

if user.isActive == 0:return render(request, 'login.html', {'error_msg': '账号尚未激活'})


说明:这里我暂时用的用户名username,可以设置成邮箱,或这个两者都可以登陆的那种(借助Q),这里不说了

那么在邮箱里点击链接后,需要做的就是让isActive=True

class ActiveUserView(View):def get(self, request, active_code):all_codes = EmailPro.objects.filter(code=active_code)if all_codes:for recode in all_codes:email = recode.emailuser = User.objects.get(email=email)user.isActive=Trueuser.save()return redirect('/login/')else:return render(request, 'code_fail.html')

用到的url

url('^active/(?P<active_code>.*)/$', ActiveUserView.as_view(), name='active_code'),  # 注册激活链接

至此本篇文章结束

django注册发送邮箱激活账号相关推荐

  1. 邮箱激活功能,前台用户注册后需要登录邮箱激活账号才能够登录的,请简述激活过程,重点是安全性

    在提交了注册信息后,同时在数据库中写入激活码,同时程序把激活码(链接)发送到注册者的信箱里,注册者点击激活链接后,程序会和数据库里的数据进行对比,对比通过即完成激活.           每次有新用户 ...

  2. 使用 Java Mail 实现注册时邮箱激活验证功能

    最近在做毕设中实现注册功能时使用到了邮箱激活验证,在此总结下. 简介 JavaMail 是提供给开发者处理电子邮件相关的编程接口,它是 SUN 发布的用来处理 email 的 API ,它可以方便地执 ...

  3. java项目实现发送邮箱激活用户功能

    文章目录 具体需求功能: (1)登录邮箱配置 (2)在pom中引入发送邮件依赖 (3)在yml文件配置发件人用户名密码 (4)引入邮件发送工具类 (5)测试发送激活邮件 (6)第五步 具体需求功能: ...

  4. SSM登录注册和邮箱激活

    1:首先是html1的样式 <!DOCTYPE html> <html lang="en"> <head><meta charset=&q ...

  5. day22 案例 发送邮箱激活码 购物车 分析

    2019独角兽企业重金招聘Python工程师标准>>> 邮箱激活码: 购物车分析: 转载于:https://my.oschina.net/u/2356966/blog/650116

  6. JavaWeb25.3【综合案例:注册功能(含邮箱激活账号)】

    register.html 1 <!DOCTYPE html>2 <html lang="en">3 <head>4 <meta char ...

  7. django 注册登录邮箱验证功能

    邮箱注册 一.Python自带的邮箱模块 步骤 1.开启163邮箱服务器 2.写脚本文件 import smtplib # 1.导入邮件模块 from email.mime.text import M ...

  8. java实现邮箱激活注册账号完整案例

    项目业务流程介绍:1.用户填写用户名,邮箱,注册密码,提交注册信息(此时还不能登录系统).2.系统通过一个已配置好的QQ邮箱账号向刚刚注册的QQ邮箱发送激活邮件,邮件内容包含激活链接.3.注册用户登录 ...

  9. idea实现注册登录时使用QQ邮箱激活功能

    首先建立数据库,我的数据库为: CREATE TABLE user (uid varchar(11) primary key , -- 账号type int default 1, -- 类型, 1注册 ...

最新文章

  1. VMware HA实战攻略之四VMware HA安装及配置
  2. Linux系统端口聚合技术bonding
  3. 【Atcoder】ARC083 D - Restoring Road Network
  4. iOS----------学习路线思维导图
  5. 2年Java面试提问总结
  6. 服务体系总出bug,咸鱼社交挤压,转转的综合性二手电商还好做吗?
  7. WINDOWS下对音频的处理过程(转)
  8. Anaconda安装第三方包(whl文件)
  9. liunx的urandom生成随机字符
  10. 2.Mysql数据库的优化技术(1)
  11. UVN相机模型矩阵推导
  12. 水平面天文辐射网络模拟(基于ArcGIS)
  13. django异常日志_Sentry前端异常追踪平台集成钉钉消息提醒
  14. 小型产生式系统——昆虫识别
  15. JavaMail gmail邮箱,gmx邮箱,disroot邮箱,protonmail邮箱,tutanota邮箱以及阿里云服务器邮箱配置
  16. Python之利用marshmallow实现序列化与反序列化
  17. System.setOut()重定向输出解释
  18. 锂电池参数的一些概念结合一块具体电池参数表的理解
  19. linux jdk,hadoop,zookeeper, hive , zeppelin ,sqoop ,hbase,scala,spark,flume,kafka 安装终极脚本全家桶安装
  20. 5-3中央处理器-数据通路的功能和基本结构

热门文章

  1. Android--高德地图通过经纬度简单的实现轨迹回放
  2. 真空度精密控制技术在液相透射电子显微镜液体厚度调节中的应用
  3. 三战MySQL数据库【终极篇】
  4. 市政交通一卡通退卡网点
  5. mysql 多表联查
  6. 使用返回或调用E x i t T h r e a d的方法撤消线程时,该线程的内存堆栈也被撤消
  7. C++ 中using 的使用
  8. 安庆师范大学计算机与信息学院老师手机号码,苏本跃(计算机与信息学院)老师 - 安庆师范学院 - 院校大全...
  9. JHipster学习记录 - 2 JHipster UAA
  10. 安踏集团公布2018年收入241亿元,同比大增44.4%