使用 Django 来做一个电子邮箱注册 并 发送验证码的功能 (此处以 163 邮箱为例)

一. 登陆 163 邮箱账号,  然后进行下列操作

二. settings 配置文件

# 发送邮箱验证码
EMAIL_HOST = "smtp.163.com" # 服务器
EMAIL_PORT = 25 # 一般情况下都为25
EMAIL_HOST_USER = "xxx@163.com" # 账号
EMAIL_HOST_PASSWORD = "******" # 密码 (注意:这里的密码指的是授权码)
EMAIL_USE_TLS = False # 一般都为False
EMAIL_FROM = "xxx@163.com" # 邮箱来自

三. 添加电子邮箱验证 model

# 邮箱验证
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="验证码类型", max_length=10,
choices=(("register", "注册"), ("forget", "找回密码")))
send_time = models.DateTimeField(verbose_name="发送时间", default=datetime.datetime.now()) class Meta:
verbose_name = u"2. 邮箱验证码"
verbose_name_plural = verbose_name def __unicode__(self):
return '{0}({1})'.format(self.code, self.email)

四. 发送邮件工具  email_send.py

from random import Random  # 用于生成随机码
from django.core.mail import send_mail # 发送邮件模块
from app01.models import EmailVerifyRecord # 邮箱验证model
from django.conf import settings # setting.py添加的的配置信息 import datetime # 生成随机字符串
def random_str(randomlength=8):
"""
随机字符串
:param randomlength: 字符串长度
:return: String 类型字符串
"""
str = ''
chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'
length = len(chars) - 1
random = Random()
for i in range(randomlength):
str += chars[random.randint(0, length)]
return str # 发送电子邮件
def send_code_email(email, send_type="register"):
"""
发送电子邮件
:param email: 要发送的邮箱
:param send_type: 邮箱类型
:return: True/False
"""
email_record = EmailVerifyRecord()
# 将给用户发的信息保存在数据库中
code = random_str(16)
email_record.code = code
email_record.email = email
email_record.send_type = send_type
email_record.send_time = datetime.datetime.now()
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)
email_body = "您的邮箱注册验证码为:{0}, 该验证码有效时间为两分钟,请及时进行验证。".format(code)
# 发送邮件
send_status = send_mail(email_title, email_body, settings.EMAIL_FROM, [email])
if not send_status:
return False
if send_type == "retrieve":
email_title = "找回密码"
email_body = "您的邮箱注册验证码为:{0}, 该验证码有效时间为两分钟,请及时进行验证。".format(code)
# 发送邮件
send_status = send_mail(email_title, email_body, settings.EMAIL_FROM, [email])
if not send_status:
return False
return True

五. 在你的获取验证码的接口中直接调用上面方法即可。例如 发送注册码

# 注册发送邮箱验证码
class SendEmailRegisterCodeView(APIView):
def get(self, request, *args, **kwargs):
return redirect('/register') def post(self, request, *args, **kwargs):
ret = BaseResponseData()
try:
email = request.POST.get("email", None) ret.data = {
'code': "",'email': email,'error_email': ''
} user_obj = models.MembershipAccount.objects.filter(username=email, is_active=True).first()
if user_obj:
ret.data['code'] = ""
ret.data['error_email'] = "用户已存在"
return Response(ret.dict)
else:
# 发送邮箱
res_email = send_code_email(email)
if res_email:
# 注册用户信息,设置登陆状态为False
create_last_user = models.MembershipAccount.objects.update_or_create(username=email, is_active=False)
if not create_last_user:
ret.data['code'] = ""
ret.data['error_email'] = "注册错误,请重试"
return Response(ret.dict)
return Response(ret.dict)
else:
ret.data['code'] = ""
ret.data['error_email'] = "验证码发送失败, 请稍后重试"
return Response(ret.dict)
except Exception as e:
print("错误信息 : ", e)
ret.data['code'] = ""
ret.data['error_email'] = "验证错误, 请稍后重试"
return Response(ret.dict)

python - django (实现电子邮箱的账户注册和验证码功能)的更多相关文章

  1. Python Django中QQ邮箱授权码问题

    Python Django中QQ邮箱授权码问题 系统及软件版本如下: Ubuntu Kylin 16.04 Python 3.5.1 Django 1.9.7 PyCharm Community Ed ...

  2. 【Python】【电子邮箱】

    #[[电子邮件]]'''Email的历史比Web还要久远,直到现在,Email也是互联网上应用非常广泛的服务. 几乎所有的编程语言都支持发送和接收电子邮件,但是,先等等,在我们开始编写代码之前,有必要 ...

  3. Python Django 配置QQ邮箱发送邮件

    一.实验环境 Python2.7 + Django1.10.0 二.获取QQ邮箱授权码 1.什么是授权码? 授权码是QQ邮箱推出的,用于登录第三方客户端的专用密码. 适用于登录以下服务:POP3/IM ...

  4. python 中的电子邮箱的操作

    通过python 的代码实现对email的操作,包括发送邮件和读取邮件. import poplib import smtplib from email.header import decode_he ...

  5. 基于web的网上书城系统开发-----登录注册扩展-------验证码功能

    public class CheckCode extends HttpServlet { private static final long serialVersionUID = 1L; privat ...

  6. Kindle 推送教程:教你用电子邮箱推送电子书(Kindle伴侣)

    Kindle 推送是什么意思?如何通过电子邮件附件推送?或许刚刚接触 Kindle 的朋友对这个概念不是很清楚,其实所谓 Kindle 推送是指亚马逊提供的一个"Kindle 个人文档服务& ...

  7. Kindle 推送教程:教你用电子邮箱推送电子书

    Kindle 推送是什么意思?如何通过电子邮件附件推送?或许刚刚接触 Kindle 的朋友对这个概念不是很清楚,其实所谓 Kindle 推送是指亚马逊提供的一个"Kindle 个人文档服务& ...

  8. [转]Kindle 推送教程:教你用电子邮箱推送电子书

    Kindle 推送是什么意思?如何通过电子邮件附件推送?或许刚刚接触 Kindle 的朋友对这个概念不是很清楚,其实所谓 Kindle 推送是指亚马逊提供的一个“Kindle 个人文档服务”,我们只需 ...

  9. Python Web实战:Python+Django+MySQL实现基于Web版的增删改查

    前言 本篇使用Python Web框架Django连接和操作MySQL数据库学生信息管理系统(SMS),主要包含对学生信息增删改查功能,旨在快速入门Python Web,少走弯路.效果演示在项目实战最 ...

随机推荐

  1. AOP+Token防止表单重复提交

    表单重复提交: 由于用户误操作,多次点击表单提交按钮 由于网速等原因造成页面卡顿,用户重复刷新提交页面 避免表单重复提交的方式: 1.页面上的按钮做防重复点击操作 2.在数据库中可以做唯一约束 3.利 ...

  2. IDEA 获取类的相对路径和绝对路径

    1.相对路径: 结果:action.HelloAction 2.绝对路径 结果:E:\javaProject\JavaEEProject\day08_Struts2_test01\src\action ...

  3. 你应该掌握linux中Bash命令的一些快捷方式

    在本文中,我们将分享许多对任何Linux用户都有用的Bash命令行快捷方式.这些快捷方式可以快速地执行某些动作,例如访问和运行先前执行的命令,打开编辑器,在命令行上编辑/删除/更改文本,移动光标,控制 ...

  4. Zabbix案例实践|Zabbix屏蔽告警

    近期项目中,客户要求在凌晨00:00到02:00的CPU屏蔽虚拟化监控上ESXI的红色告警,红色告警是由于某台vmCPU利用率过高而产生的.做法如下:1. 找到红色告警的触发器,通过触发器找到监控项, ...

  5. 高仿linux下的ls -l命令——C语言实现

    主要用到的函数可以参考头文件,仅仅支持ls -l这功能,扩展就交给大家了0.0 相关测试图片: ​ ​ 话不多说,直接上码 #include <stdio.h> #include < ...

  6. 【LEETCODE】48、数组分类,简单级别,题目:189,217,219,268,283,414

    package y2019.Algorithm.array; import java.util.Arrays; import java.util.Stack; /** * @ClassName Rot ...

  7. PB 之多行标题报表

    第一种 1.添加一个text,将背景色选为非透明色:position中的layer,选为foreground,这样就可以拖动列宽了         2.在position属性标签页的width里,点右 ...

  8. typescript之基础类型

    基础类型分为:数字.字符串.数组.元组.枚举.Any.Object.Null.Undefined.Never.Void 各种类型写法如下: 1.数字(number) let num:number = ...

  9. SpringBoot指定额外需要扫描的包

    我们都知道,SpringBoot主启动类标注了@SpringBootApplication注解,该注解引入了@ComponentScan注解 所以默认的包扫描规则是,程序会自动扫描主启动类所在包及其子 ...

  10. docker查看容器日志

    原文:docker查看容器日志 前言 $ sudo docker logs -f -t --tail 行数 容器名 1 2 1.命令查看 root@c68d4b5dd583c4f4ea30da2989 ...