12-Django項目實戰-登錄短信驗證

1.路由配置

在這里插入圖片描述

2.對接第三方短信接口

詳細內容請點擊

3.視圖函數

def sms_view(request):"""短信驗證視圖邏輯1.獲取請求體的數據[phone]2.調用封裝的短信發送接口,實現發送短信"""data = json.loads(request.body)phone = data.get("phone")# 四位隨機數code = random.randint(1000, 9999)# 判斷:如果10分鐘之內發過了,則直接返回,否則再發短信key = f"sms_{phone}"redis_code = caches["sms"].get(key)if redis_code:# 10分鐘之內已經發送過了,直接返回,不能再發return JsonResponse({"code": 10107, "error": "10分鐘之內發一次"})# 調用短信接口,發送短信sms_api = YunTongXunAPI(**settings.SMS_CONFIG)sms_api.run(phone, code)# 存入redis控制短信發送頻率,有效期10分鐘caches["sms"].set(key, code, 600)# 存入redis控制驗證碼有效期,有效期10分鐘expire_key = f"sms_expire_{phone}"caches["sms"].set(expire_key, code, 600)return JsonResponse({"code": 200, "data": "短信發送成功"})

4.修改user/views.py代碼

新增短信驗證代碼:

def users(request):"""注冊功能邏輯視圖1.獲取請求體數據[request.body-字節串格式]2.數據校驗[不做]3.檢查用戶名是否存在3.1 已存在:直接返回錯誤代碼3.2 不存在:處理密碼,存入數據表4.生成token5.返回正確響應[看接口文檔]"""# 獲取請求體數據data = json.loads(request.body)uname = data.get('uname')password = data.get('password')phone = data.get('phone')email = data.get('email')# 獲取短信驗證碼verify = data.get("verify")expire_key = f"sms_expire_{phone}"redis_code = caches["sms"].get(expire_key)# 超過10分鐘if not redis_code:return JsonResponse({"code": 10108, "error": {"message": "已過期,請重新獲取驗證碼"}})# 10分鐘之內,驗證碼輸入錯誤if verify != str(redis_code):return JsonResponse({"code": 10109, "error": {"message": "驗證碼輸入有誤,請重新輸入驗證碼"}})# 數據庫查詢old_users = UserProfile.objects.filter(username=uname)# 用戶已存在if old_users:return JsonResponse({'code': 10100, 'error': 'The username is existed'})# 存入數據庫try:user = UserProfile.objects.create(username=uname,password=hashlib.md5(password.encode()).hexdigest(),      # 密碼進行加密phone=phone,email=email)except Exception as e:print(e)return JsonResponse({'code': 10101, 'error': '--The username is existed'})# 簽發tokentoken = make_token(uname)# 二次開發 try一下# 發送激活郵件# 激活鏈接:http://XXX/active.html?code=xxx# code: base64(b"1016_zhaoliying")try:code_num = "%d" % random.randint(1000, 9999)        # 生成隨機數code = "%s_%s" % (code_num, uname)code = base64.urlsafe_b64encode(code.encode()).decode()# 存儲隨機數key = "active_email_%s" % unamecaches["default"].set(key, code_num, 3 * 3600 * 24)# 激活鏈接verify_url = 'http://127.0.0.1:7070/dadashop/templates/active.html?code=' + code# 異步發送激活郵件async_send_active_mail.delay(email, verify_url)except Exception as e:print("send email error:", e)# 組織數據返回result = {'code': 200,'username': uname,'data': {'token': token},'carts_count': 0}return JsonResponse(result)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/92504.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/92504.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/92504.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java技術棧/面試題合集(11)-設計模式篇

場景 Java入門、進階、強化、擴展、知識體系完善等知識點學習、性能優化、源碼分析專欄分享: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/140870227 通過對面試題進行系統的復習可以對Java體系的知識點進行查漏補缺。 注: 博客: 霸道流氓氣質-CSDN博…

Linux系統:Ext系列文件系統(軟件篇)

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄[TOC](文章目錄)一,ext2文件系統1-1 宏觀認識1-2 Block Group1-3 塊組內部構成1-3-1 超級塊(Super Block)1-3-2 塊組描述符表GDT(Group Descriptor Table…

14. isaacsim4.2教程-April Tags/給相機加噪聲

1. 前言April Tags 是一種視覺標簽(類似 QR 碼),用于通過相機進行定位和識別。它們通常用于計算機視覺任務中,幫助機器人識別和定位自己在物理空間中的位置,或者識別和追蹤特定對象。前提條件啟用 ROS 橋接&#xff1a…

Kafka + 時間輪 + 數據庫實現延遲隊列方案

Kafka 原生不支持延遲隊列功能。而RabbitMQ、RocketMQ及Redis等其他消息隊列原生支持延遲隊列。 RabbitMQ RocketMQ Redis 實現方式 通過插件實現,消息進入延遲隊列后根據配置時間過濾轉發。 原生支持,發送消息時設置延遲級別,定時任務處…

力扣 hot100 Day69

287. 尋找重復數 給定一個包含 n 1 個整數的數組 nums ,其數字都在 [1, n] 范圍內(包括 1 和 n),可知至少存在一個重復的整數。 假設 nums 只有 一個重復的整數 ,返回 這個重復的數 。 你設計的解決方案必須 不修改…

Android 的CameraX的使用(配置,預覽,拍照,圖像分析,錄視頻)

Android Studio 版本號:2024.1.2 CameraX是Jetpack系列中的一個庫,它基于Camera2 API構建,但提供了更高層次的抽象。 CameraX 三大核心用例: Preview預覽 ,ImageCapture拍照和 VideoCapture錄視頻 一、創建項目,進行環境配置 CameraX 需要一些屬于 Java 8 的方法,因此…

【機器學習深度學習】微調訓練數據質量

目錄 前言 一、為什么數據質量評估很重要 二、數據質量評估的核心維度 三、數據質量的可量化維度(必須要測的指標) 四、多答案、多類型數據的取舍與優化 場景 A:一個問題有多個相似回答 場景 B:多個類型數據,每…

從DeepSeek-V3到Kimi K2,大型語言模型架構對比

文章目錄 摘要 **稀疏化與專家系統** **注意力機制優化** **歸一化與穩定性設計** 模型架構對比詳析 DeepSeek-V3 vs Llama 4 Maverick Qwen3 vs SmolLM3 Kimi 2的突破 1 DeepSeek V3/R1 1.1 多頭潛在注意力(MLA) 1.2 混合專家系統(MoE) 1.3 DeepSeek 總結 2 OLMo 2 2.1 歸…

Unity筆記(二)——Time、Vector3、位置位移、角度、旋轉、縮放、看向

寫在前面寫本系列的目的(自用)是回顧已經學過的知識、記錄新學習的知識或是記錄心得理解,方便自己以后快速復習,減少遺忘。這里只有部分語法知識。五、Time時間相關1、時間縮放比例概念:可以通過UnityEngine.Time類的timeScale屬性控制游戲時…

vue+vite項目中怎么定義一個環境變量可以在開發環境和生產環境使用不同的值,并且可以在vue頁面和index.html通用。

首先我們需要下載一個插件vite-plugin-html然后再項目最外層和index.html同級目錄下新建.env.development和.env.production兩個項目并且定義你想要的環境變量名:注意要以VITE_開頭VITE_APP_MAP_TOKEN1233444然后vite.config.js文件import { defineConfig,loadEnv } from vite…

Python-深度學習--2信息熵,條件熵(ID3決策樹),KL散度

一、信息熵(Entropy)的計算與應用信息熵用于衡量一個概率分布的不確定性,值越大表示分布越分散(不確定性越高)。1. 數學定義對于離散概率分布 P,信息熵公式為:(通常以 2 為底單位是比…

國產化Word處理控件Spire.Doc教程:Python提取Word文檔中的文本、圖片、表格等

在現代辦公場景中,Word文檔已成為信息存儲與交流的重要載體,承載著關鍵的業務數據、結構化表格、可視化圖表以及協作批注等重要內容。面對日益增長的文檔處理需求,傳統的人工操作方式已難以滿足效率與準確性的雙重標準。采用Python實現Word文…

Spring IOC 原理

Spring IoC(控制反轉)是Spring框架的核心機制,其原理是通過容器管理對象生命周期和依賴關系,實現解耦。 1. 控制反轉(IoC)核心思想 傳統模式:對象主動創建依賴(如new Service()&…

VSCode:基礎使用 / 使用積累

官網 Visual Studio Code - Code Editing. Redefined 記錄一、更新依賴 嘗試刪除yarn.lock文件 記錄二、“解決沖突”的方式變了 更新后,“解決沖突”的方式變了,有的時候能選中兩者,有的時候不能 現在又更新了,回復到了原來…

tcp 確認應答和超時時間

1. 確認應答之間的時間(RTT)這是指 從發送方發送數據到接收方返回確認(ACK)之間的時間。它反映的是數據傳輸的 往返延遲。例如,發送方發送一個數據包,接收方收到后,回傳一個確認包(A…

圖的應用-最短路徑

最短路徑的典型用途:交通網絡的問題——從甲地到乙地之間是否有公路連通?在有多條通路的情況下,哪一條路最短?交通網絡用有向網來表示:頂點——表示地點,弧——表示兩個地點有路連通,弧上的權值…

【qt5_study】1.Hello world

模板 作為初學者我們選擇第一個Application(Qt)和 Qt Widgets Application,所謂的模板就是 Qt為了方便開發程序,在新建工程時可以讓用戶基于一種模板來編寫程序,包括 cpp文件, ui文件都已經快速的創建,而不用用戶手動創建這些文件。 基類 這里默認選擇的基類為 QMainWin…

項目構想|文生圖小程序

Date: August 4, 2025項目介紹 👋,我們通過 Vibe Coding 做一個文字生成圖片的小程序。 我們會從需求分析、技術選型、UI設計、項目構筑到最后打包,一路嘗試 Vibe Coding 實現。 創建項目 創建文件夾:ai-pic-mini-app 采用 Git 進…

TiDB/MongoDB/Taosdb存儲引擎概覽

數據庫類型存儲引擎數據結構源碼位置tidbRockDBLSM樹https://github.com/facebook/rocksdbmongodbWiredTigerB 樹/LSM樹https://github.com/wiredtiger/wiredtigerTDengineTSDBBRINhttps://github.com/taosdata/TDengine 1、tidb存儲引擎概覽 LSM樹數據結構描述LSM樹(Log Str…

qt窗口--01

文章目錄qt窗口--01窗口概覽菜單欄工具欄狀態欄浮動窗口子窗口對話框model結語很高興和大家見面,給生活加點impetus!!開啟今天的編程之路!! 作者:?( ‘ω’ )?260 我的專欄:qt,Li…