教程總體簡介:美多商城 商業模式介紹 1.B2B--企業對企業 2.C2C--個人對個人 5.O2O--線上到線下 開發流程 說明: 需求分析 1. 用戶部分 注冊 登錄 個人信息 地址管理 修改密碼 3. 購物車部分 購物車管理 項目架構 創建工程 1. 在git平臺創建工程 2. 添加前端文件 合并 3. 創建Django REST framework工程 4. 修改manage.py 5. 創建數據庫 收貨地址 省市區地址查詢 數據庫建表 后端接口設計 前端 使用緩存 安裝 使用方法 為省市區視圖添加緩存 緩存數據保存位置與有效期的設置 用戶地址管理代碼 后端 商品部分 數據庫表設計 表結構 數據庫模型類 FastDFS分布式文件系統 1. 什么是FastDFS 2. 文件上傳流程 Docker使用 安裝與操作 1. 在Ubuntu中安裝Docker 2. 啟動與停止 3. Docker鏡像操作 5. 將容器保存為鏡像 6. 鏡像備份與遷移 使用Docker安裝FastDFS 1. 獲取鏡像 2. 運行tracker 3. 運行storage CKEditor富文本編輯器 1. 安裝 3. 添加CKEditor設置 5. 為模型類添加字段 6. 修改Bug 添加測試數據 在admin中注冊模型類 添加FastDFS保存的測試圖片數據 添加對應的數據庫測試數據 頁面靜態化 注意 定時任務 添加應用 設置任務的定時時間 靜態化首頁的手動腳本 商品詳情頁 異步任務的觸發 腳本工具 用戶瀏覽歷史記錄 2. 查看 商品搜索 2. 搜索引擎原理 3. Elasticsearch 4. 使用Docker安裝Elasticsearch及其擴展 6. 前端 項目準備 配置 1. 修改settings/dev.py 文件中的路徑信息 2. INSTALLED_APPS 4. Redis 5. 本地化語言與時區 7. 異常處理 用戶模型類 Django用戶模型類 創建自定義的用戶模型類 購物車數據存儲設計 1. Redis保存已登錄用戶 添加到購物車 2. 后端實現 查詢購物車數據 登錄合并購物車 修改登錄視圖 訂單結算 訂單部分 保存訂單 4. 使用樂觀鎖改寫下單邏輯 5. 需要修改MySQL的事務隔離級別 下單成功頁面 前端文件 沙箱環境 電腦網站支付流程 接入步驟 配置秘鑰 發起支付 保存支付結果 Xadmin 用戶權限控制 數據庫讀寫分離 MySQL主從同步 1. 主從同步的定義 3. 配置主從同步的基本步驟 4. 詳細配置主從同步的方法 配置Django實現數據庫讀寫分離 2. 創建數據庫操作的路由分發類 部署 1. 靜態文件 2. 動態接口 圖片驗證碼 3. 設置域名 4. 前端Vue代碼: 跨域CORS 使用Celery完成發送短信 判斷帳號是否存在 1. 判斷用戶名是否存在 JWT 什么是JWT 起源 傳統的session認證 基于token的鑒權機制 JWT長什么樣? JWT的構成 header playload signature 如何應用 urllib使用說明 綁定用戶身份接口 用戶中心個人信息 郵件與驗證 使用Django發送郵件 保存郵箱并發送驗證郵件 驗證郵箱鏈接
完整筆記資料代碼:https://gitee.com/yinuo112/Backend/tree/master/Django/django美多商城項目完整開發4.0/note.md
感興趣的小伙伴可以自取哦~
全套教程部分目錄:
部分文件圖片:
項目準備
配置
1. 修改settings/dev.py 文件中的路徑信息
我們將Django的應用放到了 工程目錄/meiduo_mall/apps
目錄下,如果創建一個應用,比如users,那么在配置文件的INSTALLED_APPS中注冊應用應該如下:
| |
為了還能像如下方式簡便的注冊引用,我們需要向Python解釋器的導包路徑中添加apps應用目錄的路徑。
| |
我們將配置文件改為放在settings子目錄下,所以 配置文件中的BASE_DIR
指向的變為了meiduo/meiduo_mall/meiduo_mall
。
使用sys.path
添加<BASE_DIR>/apps
目錄,即可添加apps應用的導包路徑。
| |
2. INSTALLED_APPS
在INSTALLED_APPS中添加rest_framework
| |
3. 數據庫
| |
注意:
記得在meiduo/meiduo_mall/__init__.py
文件中添加
| |
4. Redis
安裝django-redis,并配置
| |
除了名為default的redis配置外,還補充了名為session的redis配置,分別使用兩個不同的redis庫。
同時修改了Django的Session機制使用redis保存,且使用名為'session'的redis配置。
此處修改Django的Session機制存儲主要是為了給Admin站點使用。
**關于django-redis 的使用,說明文檔可見[
5. 本地化語言與時區
| |
6. 日志
| |
7. 異常處理
修改Django REST framework的默認異常處理方法,補充處理數據庫異常和Redis異常。
新建utils/exceptions.py
| |
配置文件中添加
| |
項目準備
用戶模型類
Django提供了認證系統,文檔資料可參考此鏈接[
Django認證系統同時處理認證和授權。簡單地講,認證驗證一個用戶是否它們聲稱的那個人,授權決定一個通過了認證的用戶被允許做什么。 這里的詞語“認證”同時指代這兩項任務,即Django的認證系統同時提供了認證機制和權限機制。
Django的認證系統包含:
- 用戶
- 權限:二元(是/否)標志指示一個用戶是否可以做一個特定的任務。
- 組:對多個用戶運用標簽和權限的一種通用的方式。
- 一個可配置的密碼哈希系統
- 用戶登錄或內容顯示的表單和視圖
- 一個可插拔的后臺系統
Django默認提供的認證系統中,用戶的認證機制依賴Session機制,我們在本項目中將引入JWT認證機制,將用戶的身份憑據存放在Token中,然后對接Django的認證系統,幫助我們來實現:
- 用戶的數據模型
- 用戶密碼的加密與驗證
- 用戶的權限系統
Django用戶模型類
Django認證系統中提供了用戶模型類User保存用戶的數據,默認的User包含以下常見的基本字段:
username
必選。 150個字符以內。 用戶名可能包含字母數字,_
,@
,+
.
和-
個字符。在Django更改1.10:max_length
從30個字符增加到150個字符。
first_name
可選(blank=True
)。 少于等于30個字符。
last_name
可選(blank=True
)。 少于等于30個字符。
email
可選(blank=True
)。 郵箱地址。
password
必選。 密碼的哈希及元數據。 (Django 不保存原始密碼)。 原始密碼可以無限長而且可以包含任意字符。
groups
與Group
之間的多對多關系。
user_permissions
與Permission
之間的多對多關系。
is_staff
布爾值。 指示用戶是否可以訪問Admin 站點。
is_active
布爾值。 指示用戶的賬號是否激活。 我們建議您將此標志設置為False
而不是刪除帳戶;這樣,如果您的應用程序對用戶有任何外鍵,則外鍵不會中斷。它不是用來控制用戶是否能夠登錄。 在Django更改1.10:在舊版本中,默認is_active為False不能進行登錄。
is_superuser
布爾值。 指定這個用戶擁有所有的權限而不需要給他們分配明確的權限。
last_login
用戶最后一次登錄的時間。
date_joined
賬戶創建的時間。 當賬號創建時,默認設置為當前的date/time。
常用方法:
set_password
(raw_password)
設置用戶的密碼為給定的原始字符串,并負責密碼的。 不會保存User
對象。當None
為raw_password
時,密碼將設置為一個不可用的密碼。
check_password
(raw_password)
如果給定的raw_password是用戶的真實密碼,則返回True,可以在校驗用戶密碼時使用。
管理器方法:
管理器方法即可以通過User.objects.
進行調用的方法。
create_user
(username, email=None, password=None, **extra_fields)
創建、保存并返回一個User
對象。
create_superuser
(username, email, password, **extra_fields)
與create_user()
相同,但是設置is_staff
和is_superuser
為True
。
創建自定義的用戶模型類
Django認證系統中提供的用戶模型類及方法很方便,我們可以使用這個模型類,但是字段有些無法滿足項目需求,如本項目中需要保存用戶的號,需要給模型類添加額外的字段。
Django提供了django.contrib.auth.models.AbstractUser
用戶抽象模型類允許我們繼承,擴展字段來使用Django認證系統的用戶模型類。
我們現在在meiduo/meiduo_mall/apps
中創建Django應用users,并在配置文件中注冊users應用。
在創建好的應用models.py中定義用戶的用戶模型類。
| |
我們自定義的用戶模型類還不能直接被Django的認證系統所識別,需要在配置文件中告知Django認證系統使用我們自定義的模型類。
在配置文件中進行設置
| |
AUTH_USER_MODEL
參數的設置以點.
來分隔,表示應用名.模型類名
。
注意:Django建議我們對于AUTH_USER_MODEL
參數的設置一定要在第一次數據庫遷移之前就設置好,否則后續使用可能出現未知錯誤。
執行數據庫遷移
| |
注冊
創建好用戶模型類后,我們開始來實現第一個業務邏輯——用戶注冊。
設計接口的思路
- 分析要實現的業務邏輯,明確在這個業務中需要涉及到幾個相關子業務,將每個子業務當做一個接口來設計。
-
分析接口的功能任務,明確接口的訪問方式與返回數據:
-
接口的請求方式,如GET 、POST 、PUT等
- 接口的URL路徑定義
- 需要前端傳遞的數據及數據格式(如路徑參數、查詢字符串、請求體表單、JSON等)
- 返回給前端的數據及數據格式
在前后端分離的應用模式中,我們作為后端開發人員設計后端接口時,可以不用考慮返回給前端數據后,前端如何處理,這是前端開發人員的工作,我們只需明確我們要保存的或者要返回的是什么數據即可。
明確上述每一點后,即可開始編寫接口。
注冊業務接口分析
在用戶注冊中,需要實現以下接口:
- 圖片驗證碼
- 短信驗證碼
- 用戶名判斷是否存在
- 號判斷是否存在
- 注冊保存用戶數據
圖片驗證碼、短信驗證碼考慮到后續可能會在其他業務中也用到,因此我們將圖片驗證碼獨立,創建一個新應用verifications,在此應用中實現圖片驗證碼、短信驗證碼。