使用 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. 【剑指offer】面试题 20. 表示数值的字符串

    面试题 20. 表示数值的字符串

  2. [转帖]linux Shell sort按照指定列排序

    linux Shell sort按照指定列排序 https://blog.csdn.net/weixin_38308151/article/details/80760133 kubectl get p ...

  3. proc 目录介绍

    /proc/apm  高级电源管理(APM)版本信息及电池相关状态信息,通常由apm命令使用: /proc/buddyinfo  用于诊断内存碎片问题的相关信息文件: /proc/cmdline  在 ...

  4. Spring Boot取消默认tomcat启动,打成war包发布到服务器运行

    一.设置打包方式 在pom.xml中设置打包格式 <packaging>war</packaging> 二.取消Spring Boot的tomcat <!--部署成war ...

  5. Java开发笔记(一百一十七)AWT窗口

    前面介绍的所有Java代码,都只能通过日志观察运行情况,就算编译成class文件,也必须在命令行下面运行,这样的程序无疑只能给开发者做调试用,不能拿给一般人使用.因为普通用户早已习惯在窗口界面上操作, ...

  6. XGBoost对波士顿房价进行预测

    import numpy as np import matplotlib as mpl mpl.rcParams["font.sans-serif"] = ["SimHe ...

  7. [CodeChef-ANUDTQ] Dynamic Trees and Queries

    类似维护括号序列,给每个点建两个点,然后所有操作都能轻松支持了.注意sum和lastans是long long. #include<cstdio> #include<algorith ...

  8. FastDFS安装指南

    FastDFS安装指南 提前准备好的文件资料: 1.FastDFS--tracker安装 1.1 FastDFS安装环境 FastDFS是C语言开发,建议在linux上运行,本教程使用Centos7. ...

  9. Linux sftp命令

    sftp是Secure File Transfer Protocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的网络的加密方法.sftp 与 ftp 有着几乎一样的语法和功能.SFTP 为 ...

  10. (六) Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)

    参考并感谢 官方文档 https://hub.docker.com/_/redis GitHub https://github.com/antirez/redis happyJared https:/ ...