Django 后端架构开发:手机与邮箱验证码接入、腾讯云短信SDK和网易邮箱
Django 后端架构开发:手机与邮箱验证码接入、腾讯云短信SDK和网易邮箱接入
🌟 手机短信与邮箱短信验证码的应用场景
在现代应用中,短信和邮箱验证码是用户验证和安全管理的关键组成部分。它们广泛应用于注册、登录、找回密码等场景,旨在通过多因素认证提高账户的安全性。尤其在金融、电商、社交媒体等领域,短信和邮箱验证码是确保用户身份真实性的常见手段。
应用场景:
- 用户注册:用户在注册时,需要通过手机短信或邮箱验证码来验证其身份,确保注册信息的真实有效。
- 登录保护:为了防止账户被盗取,系统可以要求用户在登录时输入短信或邮箱验证码作为附加验证。
- 密码找回:当用户忘记密码时,系统会通过短信或邮箱验证码来验证用户身份,并提供密码重置链接或新密码。
- 交易确认:在进行敏感操作(如转账、支付)时,通过短信或邮箱验证码来确认用户操作的合法性。
通过这些应用场景,我们能够提高系统的安全性,防止未授权的访问或操作。接下来,我们将探讨这些验证码系统的实现原理,并展示如何在 Django 项目中集成这些功能。
🌟 手机短信与邮箱验证码的实现原理
短信验证码和邮箱验证码的实现原理涉及两个主要步骤:生成验证码和发送验证码。每个步骤的具体实现取决于使用的服务提供商和技术栈。
-
生成验证码:验证码通常是一个随机生成的数字或字母组合。为了保证其安全性,验证码应具有足够的复杂性和随机性。常用的生成方法包括使用随机数生成器生成一定长度的字符串。
示例代码:
import random import stringdef generate_verification_code(length=6):characters = string.ascii_letters + string.digitsreturn ''.join(random.choice(characters) for _ in range(length))# 生成6位验证码 code = generate_verification_code() print(f"生成的验证码是: {code}")
-
发送验证码:发送验证码的方式取决于选择的服务。对于短信验证码,我们可以使用如腾讯云短信服务;对于邮箱验证码,可以使用
smtplib
库或第三方邮件服务如网易邮箱。发送验证码时,需要确保短信或邮件内容的格式清晰,包含验证码及其有效时间等信息。短信发送示例:
import requestsdef send_sms_verification(phone_number, code):url = "https://api.sms.tencent.com"payload = {'phone': phone_number,'message': f"您的验证码是 {code},有效期为 5 分钟。",'api_key': 'your_api_key','api_secret': 'your_api_secret'}response = requests.post(url, data=payload)return response.json()# 发送短信验证码 response = send_sms_verification('13900000000', code) print(f"短信发送结果: {response}")
邮箱发送示例:
import smtplib from email.mime.text import MIMETextdef send_email_verification(to_email, code):from_email = "your_email@example.com"subject = "您的验证码"body = f"您的验证码是 {code},有效期为 5 分钟。"msg = MIMEText(body, 'plain', 'utf-8')msg['Subject'] = subjectmsg['From'] = from_emailmsg['To'] = to_emailwith smtplib.SMTP('smtp.example.com', 587) as server:server.starttls()server.login('your_email@example.com', 'your_password')server.sendmail(from_email, to_email, msg.as_string())# 发送邮箱验证码 send_email_verification('user@example.com', code)
这些示例代码展示了生成验证码、发送短信和发送邮件的基本实现。在实际应用中,还需要考虑验证码的有效期、存储和验证逻辑。
🌟 手机验证码的实现:使用腾讯云短信验证码 SDK
腾讯云短信验证码服务提供了强大的短信发送功能,支持全球范围内的短信发送。在 Django 项目中集成腾讯云短信验证码服务,我们需要使用腾讯云的 API 接口来实现短信发送。
首先,安装腾讯云的 Python SDK:
pip install tencentcloud-sdk-python
接下来,我们可以使用腾讯云提供的 SDK 进行短信发送。以下是一个示例代码,展示如何在 Django 项目中集成腾讯云短信验证码功能:
from tencentcloud.sms.v20190711 import sms_client
from tencentcloud.sms.v20190711.models import SendSmsRequest
import jsondef send_sms_verification(phone_number, code):client = sms_client.SmsClient('your_secret_id', 'your_secret_key')request = SendSmsRequest()request.SmsSdkAppid = 'your_app_id'request.SignName = 'your_sign_name'request.TemplateId = 'your_template_id'request.PhoneNumberSet = [phone_number]request.TemplateParamSet = [code]response = client.SendSms(request)return json.loads(response.to_json_string())# 发送短信验证码
response = send_sms_verification('+8613900000000', '123456')
print(f"短信发送结果: {response}")
在这个示例中,我们创建了一个 send_sms_verification
函数,使用腾讯云提供的 SDK 发送短信验证码。SendSmsRequest
类用于构建请求,包含短信应用 ID、签名、模板 ID 和发送的手机号等信息。
🌟 Django 接入手机验证码
在 Django 项目中集成手机验证码功能,我们需要将验证码生成和发送功能与 Django 的用户认证系统结合起来。以下是一个简单的示例,展示如何在 Django 中实现手机验证码的验证。
首先,定义一个用于存储验证码的模型:
from django.db import models
from django.contrib.auth.models import Userclass PhoneVerification(models.Model):user = models.ForeignKey(User, on_delete=models.CASCADE)phone_number = models.CharField(max_length=20)verification_code = models.CharField(max_length=10)created_at = models.DateTimeField(auto_now_add=True)is_verified = models.BooleanField(default=False)def __str__(self):return f"{self.phone_number} - {self.verification_code}"
然后,创建一个视图来处理验证码的发送和验证:
from django.shortcuts import render, redirect
from django.http import JsonResponse
from .models import PhoneVerification
from .utils import generate_verification_code, send_sms_verificationdef request_verification_code(request):phone_number = request.POST.get('phone_number')code = generate_verification_code()send_sms_verification(phone_number, code)PhoneVerification.objects.create(phone_number=phone_number, verification_code=code)return JsonResponse({'status': 'success'})def verify_code(request):phone_number = request.POST.get('phone_number')code = request.POST.get('code')verification = PhoneVerification.objects.filter(phone_number=phone_number, verification_code=code, is_verified=False).first()if verification:verification.is_verified = Trueverification.save()return JsonResponse({'status': 'success'})return JsonResponse({'status': 'error', 'message': '验证码无效'})
在这个示例中,我们创建了两个视图:request_verification_code
用于请求验证码,并将验证码存储到数据库中;verify_code
用于验证用户输入的验证码。验证码的生成和发送逻辑可以使用前面提到的 generate_verification_code
和 send_sms_verification
函数。
🌟 邮箱验证激活案例实践
邮箱验证通常用于用户注册后的激活步骤。用户在注册时会收到一封包含激活链接的邮件,点击该链接可以完成邮箱验证。以下是一个简单的示例,展示如何实现邮箱验证激活功能。
首先,定义一个用于存储邮箱验证的模型:
from django.db import models
from django.contrib.auth.models import Userclass EmailVerification(models.Model):user = models.ForeignKey(User, on_delete=models.CASCADE)email = models.EmailField()verification_code = models.CharField(max_length=10)created_at = models.DateTimeField(auto_now_add=True)is_verified = models.BooleanField(default=False)def __str__(self):return f"{self.email} - {self.verification_code}"
然后,创建一个视图来处理邮件发送和验证:
from django.shortcuts import render, redirect
from django.http import JsonResponse
from django.urls import reverse
from django.utils.http import urlencode
from .models import EmailVerification
from .utils import generate_verification_code, send_email_verificationdef request_email_verification(request):email = request.POST.get('email')user = request.usercode = generate_verification_code()send_email_verification(email, code)EmailVerification.objects.create(user=user, email=email, verification_code=code)return JsonResponse({'status': 'success'})def verify_email(request):email = request.GET.get('email')code = request.GET.get('code')verification = EmailVerification.objects.filter(email=email, verification_code=code, is_verified=False).first()if verification:verification.is_verified = Trueverification.save()return JsonResponse({'status': 'success'})return JsonResponse({'status': 'error', 'message': '验证码无效'})
在这个示例中,我们创建了两个视图:request_email_verification
用于发送邮箱验证邮件,并将验证码存储到数据库中;verify_email
用于验证用户点击激活链接后的验证码。激活链接可以通过以下方式生成:
def generate_activation_link(user, email, code):base_url = 'http://yourdomain.com' # 替换为你的域名path = reverse('verify_email')query = urlencode({'email': email, 'code': code})return f"{base_url}{path}?{query}"
🌟 邮箱验证:使用 smtplib
发送邮件
使用 smtplib
库可以在 Django 项目中实现邮箱验证功能。以下是一个简单的示例,展示如何使用 smtplib
发送包含验证码的验证邮件:
import smtplib
from email.mime.text import MIMETextdef send_email_verification(to_email, code):from_email = "your_email@example.com"subject = "您的邮箱验证码"body = f"您的邮箱验证码是 {code},有效期为 24 小时。点击以下链接进行验证:\n\nhttp://yourdomain.com/verify-email?code={code}"msg = MIMEText(body, 'plain', 'utf-8')msg['Subject'] = subjectmsg['From'] = from_emailmsg['To'] = to_emailwith smtplib.SMTP('smtp.example.com', 587) as server:server.starttls()server.login('your_email@example.com', 'your_password')server.sendmail(from_email, to_email, msg.as_string())# 发送邮箱验证码
send_email_verification('user@example.com', '123456')
在这个示例中,我们创建了一个 send_email_verification
函数,使用 smtplib
库发送包含验证码的验证邮件。MIMEText
类用于构建邮件内容,并通过 SMTP
客户端发送邮件。
🌟 Django 结合网易邮箱:权限认证
网易邮箱提供了可靠的邮件发送服务,适用于需要发送大量邮件的应用。在 Django 项目中集成网易邮箱进行权限认证,我们需要配置邮件服务器并实现相应的验证功能。
首先,配置 settings.py
文件中的邮件服务器设置:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.163.com'
EMAIL_PORT = 25
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'your_email@163.com'
EMAIL_HOST_PASSWORD = 'your_password'
然后,我们可以使用 Django 的内置邮件发送功能来发送包含验证码的邮件:
from django.core.mail import send_maildef send_email_verification(to_email, code):subject = "邮箱验证码"message = f"您的验证码是 {code},有效期为 24 小时。"send_mail(subject, message, 'your_email@163.com', [to_email], fail_silently=False)# 发送邮箱验证码
send_email_verification('user@example.com', '123456')
在这个示例中,我们配置了网易邮箱的 SMTP 服务器,并使用 send_mail
函数发送验证码邮件。send_mail
是 Django 提供的一个简单邮件发送函数,适合用于一般的邮件发送需求。
🌟 Django 对接邮件监控
邮件监控是确保邮件发送成功并处理邮件相关问题的一个重要功能。在 Django 项目中,我们可以结合邮件服务提供商的监控 API 来实现邮件监控功能。例如,腾讯云提供了邮件监控接口,可以用于查看邮件发送状态。
以下是一个示例代码,展示如何使用腾讯云邮件监控接口获取邮件发送状态:
import requestsdef check_email_status(email_id):url = "https://api.email.tencent.com/v1/monitor"params = {'email_id': email_id,'api_key': 'your_api_key','api_secret': 'your_api_secret'}response = requests.get(url, params=params)return response.json()# 检查邮件状态
status = check_email_status('your_email_id')
print(f"邮件状态: {status}")
在这个示例中,我们创建了一个 check_email_status
函数,使用腾讯云的邮件监控接口获取邮件发送状态。通过这种方式,我们可以实时监控邮件的发送情况,并及时处理发送失败或其他问题。
相关文章:
Django 后端架构开发:手机与邮箱验证码接入、腾讯云短信SDK和网易邮箱
Django 后端架构开发:手机与邮箱验证码接入、腾讯云短信SDK和网易邮箱接入 🌟 手机短信与邮箱短信验证码的应用场景 在现代应用中,短信和邮箱验证码是用户验证和安全管理的关键组成部分。它们广泛应用于注册、登录、找回密码等场景…...
RAID 方案比较
RAID(Redundant Array of Independent Disks)技术用于将多个磁盘驱动器组合成一个逻辑单元,以提高性能、可靠性或两者兼顾。以下是常见 RAID 级别的比较: RAID 0(条带化) 磁盘数量:最少 2 块可…...

零成本搭建个人 APP 和小程序后台
前言 前面也说了,通过 GitHub PagesGitHub Actions 只是解决了动态数据展示,但是要零成本得完成将用户信息存储下来,并实现数据交互呢? 我开始是想用云文档,种种原因,我还是希望有个自己能二次修改的后台…...

LCP 633 平方数之和 [leetcode - 8]
最近是在研究双指针啊,leetcode刷的题都是这方面的。都记录在最近的文章里,大家有兴趣可以去我主页看看 LCP633 平方数之和 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 b2 c 。 示例 1: 输入&…...
c语言试题及答案
1. 一个C程序的组成部分可以是( )。 A) 一个主函数和一至若干个其他函数 B) 一至若干个主函数 C) 一个主程序和一至若干个其他函数 D) 一个主程序和一至若干个子程序 2. 一个C程序的执行是从( )。 (A)本程序的main函数开始,到main函数结束 (B)本程序文件的第一个函…...

python实现链表
什么是链表 链表是由一系列节点组成的元素集合。每个节点包含两部分,数据域item和指向下一个节点的指针next。通过节点之间的相互连接最终串联成一个链表。 python实现一个简单链表 我们可以用python实现一个超级简单的链表 class node:# 初始化数据def __init_…...

Linux Shell 编程基础入门(一)
😀前言 本篇博文是关于自动化工具Shell 编程的基本介绍,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动…...

大白话讲微服务的灾难性雪崩效应
讲在前面,为什么微服务需要有熔断等策略呢?今天我们用大白话来讲讲微服务的灾难性雪崩效应,熔断策略就是解决雪崩效应的有效解决方案。 什么是灾难性雪崩效应? 假设我们有两个访问量比较大的服务A和B,这两个服务分别依…...

配置 K3s 访问私有镜像仓库
1.修改 K3s 配置文件 1)对于较新的 K3s 版本,你可以通过编辑 K3s 的配置文件来指定镜像仓库。编辑 /etc/rancher/k3s/config.yaml 文件(如果不存在则需要创建),添加或修改以下配置: # /etc/rancher/k3s/config.yaml …...

数学建模之数据分析【七】:对Pandas DataFrame 进行切片
文章目录 一、切片简介二、创建Pandas数据框三、使用iloc进行切片3.1 对行进行切片3.2 对列进行切片3.3 Dataframe选中特定单元格 四、使用loc创建切片4.1 使用Python对Dataframe中的行进行切片4.2 指定单元格 五、在Python中使用布尔条件六、结论 对 Pandas DataFrames 进行切…...
删除 Docker 容器的日志文件
删除 Docker 容器的日志文件可以帮助释放磁盘空间。以下是步骤: 1、查找日志文件路径: Docker 容器的日志通常存储在 /var/lib/docker/containers/<container_id>/ 目录下。日志文件通常名为 container_id-json.log。 通过以下命令找到日志文件的位置: docker ins…...

DevOps入门(上)
1: DevOps概念 DevOps: Development 和 Operations 的组合 DevOps 看作开发(软件工程)、技术运营和质量保障(QA)三者的交集。 突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使…...
基于Python的网易民谣歌词数据分析的设计与实现
基于Python的网易民谣歌词数据分析的设计与实现 Design and Implementation of Data Analysis for NetEase Folk Song Lyrics Based on Python 完整下载链接:基于Python的网易民谣歌词数据分析的设计与实现 文章目录 基于Python的网易民谣歌词数据分析的设计与实现摘要第一章…...
趋动科技联合云轴科技推出GPU云原生超融合解决方案
近日,趋动科技VirtAITech携手云轴科技ZStack推出GPU云原生超融合联合解决方案,提供全面、可扩展的云原生GPU存算一体化解决方案。 该方案基于云原生超融合及GPU资源池化技术,使得GPU资源管理变得更加简便易用,能够帮助企业用户在…...

Dooring智图,一款开箱即用的图片海报编辑器
嗨, 大家好, 我是徐小夕. 之前一直在社区分享零代码&低代码的技术实践,也陆陆续续设计并开发了多款可视化搭建产品,比如: Nocode/Doc,可视化 零代码打造下一代文件编辑器爆肝1000小时, Dooring零代码搭建平台3.5正式上线可视化…...

苹果macbook电脑怎么玩《黑神话:悟空》游戏教程来了
火爆全网《黑神话:悟空》是一款基于中国神话故事《西游记》改编的动作角色扮演游戏,它在PC平台上的系统要求已经公布,但目前官方尚未发布Mac版本。不过,Mac用户可以通过使用系统兼容工具如CrossOver来尝试在Mac上运行这款游戏。Cr…...
git 目录提交代码
初始化 Git 仓库(如果尚未初始化): 如果还没有初始化 Git 仓库,运行以下命令: git init将远程仓库添加到目录 b 中: 如果尚未关联远程仓库,添加远程仓库: git remote add origin <…...

多商户商品下单限购问题修复
问题: 当商品设置限购为 1 时,够买数量未超过限购,但是还是提示超出限购数量 修复方法: 修改代码路径: app\common\repositories\store\order\StoreOrderCreateRepository.php 修改代码一: i s p a y s a r r a y u n i q u e ( a r r a y c o l u m n ( is_pays array_un…...

eNSP 华为ACL配置
华为ACL配置 需求: 公司保证财务部数据安全,禁止研发部门和互联网访问财务服务器,但总裁办不受影响 R1: <Huawei>sys [Huawei]sys Router1 [Router1]undo info-center enable [Router1]int g1/0/0 [Router1-GigabitEth…...

实现高效研发运营一体化:深度落地DevOps解决方案的探索与实践
前言与概述 伴随着企业业务的快速发展,为了支撑业务发展,提高 IT 对业务的支撑能力建设。在研发工程协同方面,希望加强代码管理,实现持续构建、自动化测试、自动化部署、自动化运维,同时加强产品的安全和质量管理&…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...

【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...

Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...