二十九、【用戶體驗篇】個人中心:用戶資料展示與密碼修改

二十九、【用戶體驗篇】個人中心:用戶資料展示與密碼修改

    • 前言
      • 準備工作
      • 第一部分:后端實現 - 個人中心 API
        • 1. 修改 `UserDetailSerializer` 以支持密碼修改
        • 2. 在 `api/views.py` 中添加 `UserMeView` 和 `PasswordChangeView`
        • 3. 注冊個人中心相關 API 路由
        • 4. 后端初步測試
      • 第二部分:前端實現 - 個人中心頁面
        • 1. 更新 `user.ts` API 服務
        • 2. 添加個人中心路由和頂部菜單入口
        • 3. 創建個人中心頁面 (`src/views/profile/UserProfileView.vue`)
      • 第三部分:全面測試
    • 總結

前言

在測試平臺中,個人中心是不可或缺的重要組成部分。它不僅提供了用戶查看和管理自身信息的能力,更是保障賬戶安全、提升用戶體驗的關鍵功能。

準備工作

  1. Django 后端項目就緒: 確保你的 test-platform/backend 項目結構完整,JWT 認證已配置。
  2. Vue3 前端項目就緒。
  3. Axios 和 API 服務已封裝。
  4. Element Plus 集成完畢。
  5. 用戶已登錄: 個人中心頁面需要用戶登錄才能訪問。

第一部分:后端實現 - 個人中心 API

我們將利用 Django 內置的 User 模型和 rest_framework 的特性來實現這些 API。

1. 修改 UserDetailSerializer 以支持密碼修改

打開 test-platform/api/serializers.py,我們將復用 UserDetailSerializer
注意: 我們在《用戶管理與權限 - 篇一》中為 UserDetailSerializer 添加了 update 方法來處理密碼更新,但那個是針對管理員通過 /api/users/{id}/ 來修改其他用戶密碼的。現在我們需要支持用戶自己修改自己的密碼,這通常不需要舊密碼。

為了區分這兩種場景,我們可以:

  1. 為用戶自己修改密碼創建一個單獨的 API (/api/me/password/change/) 和 Serializer。
  2. UserDetailSerializer 中添加 password 字段,但在 update 方法中根據 request.userinstance 來判斷是否需要舊密碼驗證。

我們采用方式 1,因為它更清晰,也更安全。

a. api/serializers.py 中添加 PasswordChangeSerializer
在這里插入圖片描述

# test-platform/api/serializers.py
# ... (其他導入) ...
from django.contrib.auth.password_validation import validate_password
from django.contrib.auth.hashers import make_password # 用于哈希新密碼class PasswordChangeSerializer(serializers.Serializer):"""用于用戶修改自己密碼的序列化器"""old_password = serializers.CharField(required=True, write_only=True, min_length=6)new_password = serializers.CharField(required=True, write_only=True, min_length=6)new_password_confirm = serializers.CharField(required=True, write_only=True, min_length=6)def validate_old_password(self, value):user = self.context['request'].userif not user.check_password(value):raise serializers.ValidationError("舊密碼不正確。")return valuedef validate(self, data):# 驗證新密碼和確認密碼是否一致if data['new_password'] != data['new_password_confirm']:raise serializers.ValidationError({"new_password_confirm": "兩次輸入的新密碼不一致。"})# 確保新密碼不與舊密碼相同 (可選)user = self.context['request'].userif user.check_password(data['new_password']):raise serializers.ValidationError({"new_password": "新密碼不能與舊密碼相同。"})# 使用 Django 內置的密碼驗證器 (可以在 settings.py 中配置,例如密碼復雜度要求)try:validate_password(data['new_password'], user=self.context['request'].user)except Exception as e:raise serializers.ValidationError({"new_password": str(e)})return data

關鍵點:

  • 這是一個普通的 serializers.Serializer

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

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

相關文章

STEP-BACK PROMPTING:退一步:通過抽象在大型語言模型中喚起推理能力

摘要 我們提出了 STEP-BACK PROMPTING,這是一種簡單的提示技術,可以讓LLM進行抽象,從包含具體細節的實例中推導出高層次概念和第一性原理。利用這些概念和原理來引導推理過程,LLM在朝向正確解答路徑上顯著提升了推理能力。我們在…

Paimon vs. HBase:全鏈路開銷對比

Paimon 在特定場景(如流式 Lookup Join)下,會為了極致的查詢性能而引入額外的存儲(本地磁盤 LookupFile)和計算(構建 LookupFile)開銷。但這是一種用一次性的、可控的開銷,換取后續持…

本地的包名導致的AttributeError: module ‘langchain‘ has no attribute ‘verbose‘

你遇到的 AttributeError: module langchain has no attribute verbose 問題,確實可能是因為你的本地文件或目錄名與 langchain 官方包沖突,導致 Python 在導入時優先加載了你的本地文件而非真正的 langchain 庫。 問題原因 Python 模塊加載機制&#xf…

玄機——某學校系統中挖礦病毒應急排查

本篇文章主要記錄某學校長期未運營維護的程序,被黑客發現了漏洞,但好在學校有全流量設備,抓取到了過程中的流量包 需要你進行上機以及結合流量分析,排查攻擊者利用的漏洞以及上傳利用成功的木馬 文章目錄 靶機介紹1.使用工具分析共…

如何解決wordpress批量刪除媒體庫中的圖片很慢甚至卡死問題

批量刪除WordPress媒體庫中的圖片速度很慢,如果批量刪除的圖片多會出現CPU100%甚至卡死,出現這個問題通常最主要的原因是服務器性能問題,如果換成性能好的服務器就不會了,比如換Siteground 家的服務器,就不會有這個問題…

深度學習入門day4--手寫數字識別初探

魚書提供的代碼可以在github找到。源碼地址 環境配置部分可以看前面幾篇博客,還是用Anaconda,運行下面代碼,可以看哪個庫缺失。 import importlib import numpy as np deps {"torch": "torch","torchvision"…

STM32中定時器配置,HAL_Delay的原理,滴答定時器,微秒延時實現,PWM,呼吸燈

目錄 定時器基本定時功能實現 CubeMX設置 手動書寫代碼部分 定時器啟動 實現溢出回調函數 HAL_Delay介紹 HAL_Delay實現原理 HAL_Delay的優點 HAL_Delay的缺點 利用滴答定時器(SysTick)實現微秒級延時 PWM PWM介紹 通用定時器中的重要寄存器 PWM中的捕獲比較通道 …

飛牛NAS(fnOS)詳細安裝教程

以下是飛牛NAS(fnOS)的詳細安裝教程,結合官方指南和社區實踐整理而成: 一、準備工作 硬件需求 8GB或更大容量的U盤(用于制作啟動盤)待安裝設備(支持x86架構的物理機或迷你主機,如天鋇…

springboot 顯示打印加載bean耗時工具類

一 spring的原生接口說明 1.1 接口說明 Aware是Spring框架提供的一組特殊接口,可以讓Bean從Spring容器中拿到一些資源信息。 BeanFactoryAware:實現該接口,可以訪問BeanFactory對象,從而獲取Bean在容器中的相關信息。 Environm…

OpenGL空間站場景實現方案

OpenGL空間站場景實現方案 需求分析 根據任務要求,我需要完成一個基于Nehe OpenGL的空間站場景,實現以下功能: 完整的空間站場景建模(包含多個模型和紋理貼圖)Phong光照模型實現(包含多種光源和材質效果)攝像機鍵盤控制交互功能解決方案設計 技術棧 C++編程語言OpenG…

基于昇騰310B4的YOLOv8目標檢測推理

YOLOv8目標檢測 om 模型推理 本篇博客將手把手教你如何將 YOLOv8 目標檢測模型部署到華為昇騰 310B4 開發板上進行高效推理(其他昇騰開發版也可參考此流程)。 整個流程包括: 模型格式轉換(ONNX → OM)昇騰推理環境配…

前端跨域問題解決Access to XMLHttpRequest at xxx from has been blocked by CORS policy

在前端開發中,跨域資源共享(CORS)是一個常見的問題。它涉及到瀏覽器安全機制,防止網頁從一個域獲取資源時被另一個域阻止。錯誤信息如“Access to XMLHttpRequest at xxx from origin has been blocked by CORS policy”是典型的跨…

[ linux-系統 ] 軟硬鏈接與動靜態庫

軟硬鏈接 介紹 軟鏈接 通過下圖可以看出軟鏈接和原始文件是兩個獨立的文件,因為軟鏈接有著自己的inode編號: 具有獨立的 inode ,也有獨立的數據塊,它的數據塊里面保存的是指向的文件的路徑,公用 inode 硬鏈接 通過…

3D 商品展示與 AR 試戴能為珠寶行業帶來一些便利?

對于珠寶行業而言,長久以來,如何讓消費者在做出購買決策之前,便能真切且直觀地領略到珠寶獨一無二的魅力,始終是橫亙在行業發展道路上的一道棘手難題。而 3D 互動營銷的橫空出世,恰似一道曙光,完美且精準地…

電子電氣架構 --- SOVD功能簡單介紹

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 簡單,單純,喜歡獨處,獨來獨往,不易合同頻過著接地氣的生活,除了生存溫飽問題之外,沒有什么過多的欲望,表面看起來很高冷,內心熱情,如果你身…

【Java編程動手學】 Java中的運算符全解析

文章目錄 一、引言二、算術運算符1、基本概念2、具體運算符及示例 三、關系運算符1、基本概念2、具體運算符及示例 四、自增減運算符1、基本概念2、具體運算符及示例 五、邏輯運算符1、基本概念2、具體運算符及示例 六、位運算符1、基本概念2、具體運算符及示例 七、移位運算符…

【前端】1 小時實現 React 簡歷項目

近期更新完畢。僅包括核心代碼 目錄結構 yarn.lock保證開發者每次能下載到同版本依賴,一般不需要特別留意 package.json 是 Node.js 項目、前端項目、npm/yarn的配置文件。 Dockerfile 是用來 定義 Docker 鏡像構建過程的文本文件。它是一份腳本,告訴 …

python中的pydantic是什么?

Pydantic 是 Python 中一個用于數據驗證和設置管理的庫,主要通過 Python 類型注解(Type Hints)來定義數據結構,并自動驗證輸入數據的合法性。它廣泛應用于 API 開發(如 FastAPI)、配置管理、數據序列化等場…

騰訊云市場目前飽和度

首先我需要理解市場飽和度的概念。市場飽和度通常指一個產品或服務在潛在市場中的滲透程度,高飽和度意味著市場增長空間有限,低飽和度則表明還有較大發展潛力。 從搜索結果看,騰訊云目前在中國云服務市場排名第三,市場份額約為15%…

EDR、NDR、XDR工作原理和架構及區別

大家讀完覺得有幫助記得關注和點贊!!! EDR、NDR、XDR是網絡安全中關鍵的檢測與響應技術,它們在覆蓋范圍、數據源和響應機制上有顯著差異。以下是它們的工作原理和架構詳解: --- ### 🔍 一、EDR&#xff0…