Django项目 | 实现用户注册和登录时的手机号验证

news/2024/11/21 20:19:39/

1. 创建自定义用户模型

首先,创建一个自定义用户模型来保存用户的手机号码。在Django中,可以通过继承AbstractUser模型来实现这一功能,并添加一个phone_number字段来保存用户的手机号码。

from django.contrib.auth.models import AbstractUser
from django.db import modelsclass CustomUser(AbstractUser):phone_number = models.CharField(max_length=15, unique=True)

2. 更新设置文件

在Django的设置文件中配置自定义用户模型。

AUTH_USER_MODEL = 'your_app.CustomUser'

3. 发送短信验证码

使用第三方服务(如阿里云短信服务)来发送短信验证码。以下是使用阿里云短信服务发送验证码的示例代码:

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequestdef send_sms(phone, code):client = AcsClient('your-access-key-id', 'your-access-key-secret', 'cn-hangzhou')request = CommonRequest()request.set_accept_format('json')request.set_domain('dysmsapi.aliyuncs.com')request.set_method('POST')request.set_protocol_type('https')  # https | httprequest.set_version('2017-05-25')request.set_action_name('SendSms')request.add_query_param('RegionId', 'cn-hangzhou')request.add_query_param('PhoneNumbers', phone)request.add_query_param('SignName', 'YourSignName')request.add_query_param('TemplateCode', 'YourTemplateCode')request.add_query_param('TemplateParam', '{"code": "' + code + '"}')response = client.do_action(request)return str(response, encoding='utf-8')

4. 验证手机号码

在用户注册和登录时,验证手机号码的有效性。可以通过正则表达式来验证手机号码是否符合规则(例如:11位数字,以13、14、15、17、18开头等)。

import redef validate_mobile_number(phone_number):pattern = re.compile(r"^1[3-9]\d{9}$")return pattern.match(phone_number) is not None

5. 存储和验证短信验证码

在发送短信验证码后,需要将验证码存储在服务器端(如Redis或数据库),并在用户提交验证码时进行验证。

from redis import StrictRedisdef store_and_validate_code(phone, code):sr = StrictRedis(decode_responses=True)sr.setex(phone, 300, code)  # 存储验证码,有效期5分钟return sr.get(phone) == code

6. 集成到视图和表单

在Django的视图和表单中集成上述逻辑,处理用户注册和登录时的手机号验证。

from django import forms
from django.shortcuts import render, redirectclass RegisterForm(forms.Form):phone_number = forms.CharField(max_length=15)password = forms.CharField(widget=forms.PasswordInput)code = forms.CharField(max_length=6)def clean_code(self):phone = self.cleaned_data.get('phone_number')code = self.cleaned_data.get('code')if not store_and_validate_code(phone, code):raise forms.ValidationError("验证码错误")return code

通过这些步骤,可以在Django项目中实现用户注册和登录时的手机号验证功能。这不仅提高了安全性,也增强了用户体验。


http://www.ppmy.cn/news/1548849.html

相关文章

Kubernetes 10 问,测测你对 k8s 的理解程度

Kubernetes 10 问 假设集群有 2 个 node 节点,其中一个有 pod,另一个则没有,那么新的 pod 会被调度到哪个节点上? 应用程序通过容器的形式运行,如果 OOM(Out-of-Memory)了,是容器重…

深入解析:如何使用 PyTorch 的 SummaryWriter 进行深度学习训练数据的详细记录与可视化

深入解析:如何使用 PyTorch 的 SummaryWriter 进行深度学习训练数据的详细记录与可视化 为了更全面和详细地解释如何使用 PyTorch 的 SummaryWriter 进行模型训练数据的记录和可视化,我们可以从以下几个方面深入探讨: 初始化 SummaryWriter…

相机光学(四十四)——ALL-PD和PDAF

1.PDAF(Phase Detection Auto Focus) PDAF是相位检测自动对焦技术的缩写,它是一种在数码相机和智能手机摄像头中使用的自动对焦技术。   PDAF的原理是根据CIS(CMOS图像传感器)不同像素的相位差信息,判断出…

uni-app快速入门(六)--rpx尺寸单位与Flex布局

一、uni-app尺寸单位 uni-app支持的通用尺寸单位包括px、rpx。为支持跨平台,在搭建空驾驶建议使用Flex布局。px指屏幕像素,rpx是响应式像素,是根据屏幕宽度自适应的动态单位。假如屏幕宽度为750像素,750rpx正好为屏幕宽度。uni-ap…

torch.utils.data.dataset 的数据组织形式——python list、dict、tuple内存消耗量

在Pytorch中,我们需要通过torch.utils.data.dataset来实现数据的读取。torch.utils.data.dataset是一种非流式的数据读取策略,需要将数据一次性导入至内存中.如果数据规模过大,可能存在内存不够的问题。 import torch from torch.utils.data…

14. 【.NET 8 实战--孢子记账--从单体到微服务】--简易权限--章节总结

本章重点介绍了如何在一个简单的系统中实现基本的权限管理功能。通过构建一个简单的权限控制模型,章节阐述了如何为用户分配权限,并在应用程序中进行访问控制。 一、关键要点: 1. 用户管理(登录/注册/Token) 本章节聚…

持续集成与持续部署:CI/CD简介

一、概念及含义 CI/CD 是一种在软件开发和交付过程中广泛应用的实践方法,它由持续集成(Continuous Integration,简称 CI)和持续交付 / 持续部署(Continuous Delivery/Continuous Deployment,简称 CD&#…

机器学习—再次决定下一步做什么

通过看Jtrain和Jcv,即训练错误和交叉验证错误,或者甚至绘制学习曲线,你可以试着去感受一下,你的学习算法是高偏差还是高方差,一种学习算法,会经常看训练错误和交叉验证错误,尝试判断算法是高偏差…