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

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.xdnf.cn/news/19819.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

奶龙IP联名异军突起:如何携手品牌营销共创双赢?

在快节奏的互联网消费时代,年轻消费群体对产品和品牌的要求越来越挑剔。因此在品牌年轻化的当下,一方面需要品牌自身形象也要不断追求时代感,另一方面品牌也需要不断引领消费者需求,提升竞争力和产品力。 奶龙作为近年来异军突起…

项目中排查bug的思路案例

bug描述:调用了删除的接口,执行成功了,也删掉了选中的数据,但是不执行删除后的处理操作,会报一个“系统未知错误,请反馈给管理员” 解决: 成功删掉了数据,但删除后的操作没有执行&a…

欧瑞博智能家居掀起风潮 助力新加坡智慧国2.0发展

(狮城快讯)在新加坡智慧国2.0计划的推动下,智能科技日益融入生活,智慧社区建设成为提升生活品质的关键。智能家居品牌ORVIBO凭借创新的AI技术和优质用户体验,迅速成为本地智能家居的领导者,从别墅、公寓到H…

【AI人脸整合包及教程】FaceFusion 3.0.0:AI人脸技术的新高度

一、引言 在当今数字化时代,AI技术不断发展并渗透到各个领域,其中AI人脸技术尤为引人注目。FaceFusion 3.0.0作为这一领域的代表性工具,正引领着新的潮流。 二、FaceFusion 3.0.0的功能特点 高度精确的人脸效果 FaceFusion 3.0.0利用先进的…

OLED透明屏在零售行业有哪些优势

OLED透明屏在零售行业具有诸多优势,这些优势使得它成为零售行业中一种创新且高效的展示工具。以下是对OLED透明屏在零售行业优势的详细分析: 1. 视觉吸引力与沉浸感 高透明度:OLED透明屏能够实现40%以上的透明度,使得屏幕后的物体…

win10 pip 永久镜像

打开文件夹,找到目录 :C:\Users\xxx\AppData\Roaming // xxx是你的用户名 如果看不到AppData文件夹,可以点击上方的查看 ,勾选上隐藏的项目即可 然后再Roaming 目录下创建文件夹 pip 在pip文件夹下面创建 pip.ini 文件&#xf…

计算机毕业设计 | SpringBoot+vue城镇保障性住房管理 公租房系统(附源码+论文)

1,绪论 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理城镇保障性住房管理系统的相关信…

软件测试学习笔记丨Selenium学习笔记:元素定位与操作

本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/22510 本文为霍格沃兹测试开发学社的学习经历分享,写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~ 说明:本篇博客基于sel…

任我行协同CRM普及版 CommonDict/Edit SQL注入漏洞复现

0x01 产品简介 任我行协同CRM普及版是由成都市任我行信息技术有限公司开发的一款客户关系管理软件。该软件旨在帮助中小企业简化管理流程,提升客户管理能力,以及优化销售业绩。集成了CRM、OA、HR等多项功能于一体,为企业提供了一个全面的管理平台。该软件通过高度集成的解决…

JVM调优理论

JVM调优 文章目录 JVM调优理论JVM内存结构堆栈方法区(逻辑上的划分,不同版本略有区别) 类加载过程编译与反编译类加载过程 编译器优化机制字节码如何运行Hotspot的即时编译器分层编译找热点方法Hospot 内置的两类计数器 方法内联逃逸分析 垃圾…

(C语言)数据在内存中的储存

目录 1>.存储的方式 2>.关于用%d来打印char类型数 3>.不同类型能表示的范围 4>.浮点数在内存中的存储 储存方式 E在内存中的存储 E在内存中的取出 1)E不全是0和1 2)E全为0 3)E全为1 整数和浮点数在内存中是以二进制的方…

Tryhackme练习-Wonderland

基本信息 由于tryhackme是在线靶场,所以这里的IP均为对方的内网IP 攻击机器:10.10.242.186 靶机:10.10.173.3 目标:获取2个flagroot权限 具体流程 信息收集 首先我们使用fscan进行端口扫描,fscan -h 10.10.173.…

【设计模式-原型】

**原型模式(Prototype Pattern)**是一种创建型设计模式,旨在通过复制现有对象的方式来创建新对象,而不是通过实例化类来创建对象。该模式允许对象通过克隆(复制)来创建新的实例,因此避免了重新创…

配置maven本地仓库的路径及镜像仓库

一、本地仓库路径 找到标签:localRepository,将标签中间的内容换成你要配置的库文件夹路径即可: 二、镜像仓库 找到标签:mirrors,配置如下: 可以将url标签中的路径换成你想配置的路径即可

在一个.NET Core项目中使用RabbitMQ进行即时消息管理

为了在一个.NET Core项目中使用RabbitMQ进行即时消息管理,以下是详细的全程操作指南,包括安装、配置、编写代码和调试使用。 一、安装RabbitMQ 1. 安装Erlang RabbitMQ依赖Erlang,因此需要先安装Erlang。 Windows: 下载并运行Erlang安装…

51c大模型~合集60

我自己的原文哦~ https://blog.51cto.com/whaosoft/12102352 #百舸 当大模型Scaling Law继续,万卡集群算力释放在「百舸」这里找到一条通途 在电影《天下无贼》中,葛优扮演的黎叔有这样一句经典的台词,「二十一世纪什么最贵?人…

Auto-Py-to-Exe:一键生成可执行的EXE文件,助力 Python 项目在Windows上快速部署

Python以其简洁易懂的语法和丰富的库而闻名,但对于想要将Python项目分享给他人或进行独立部署的开发者来说,将代码打包成可执行文件往往是必不可少的一步。而Auto-Py-to-Exe就是一个功能强大的工具,它能帮助你轻松将Python脚本转换成独立的可…

如何巧妙使用AI工具

一、AI的介绍 AI:即人工智能,是计算机科学体系下的一个学科,是指通过计算机系统模拟人类智力的一种技术。 AIGC:AI领域的一个应用分支,专注于利用AI技术自动生成内容,包括文本,代码&#xff0…

C/C++ 优化,strlen 示例

目录 C/C optimization, the strlen examplehttps://hallowed-blinker-3ca.notion.site/C-C-optimization-the-strlen-example-108719425da080338d94c79add2bb372 揭开优化的神秘面纱... 让我们来谈谈 CPU 等等,SIMD 是什么? 为什么 strlen 是一个很…

性能测试

浅谈性能瓶颈之Mysql慢查询 1.开启测试环境的mysql数据库慢查询日志,然后在日志文件里自动记录这些慢查询,以及not using index的查询。数据库执行下面几个命令: set global slow_query_logon /*开启慢查询日志*/set log_queries_not_using_…