Django 專案總結(5)- 地址管理
地址管理
實現使用者地址的管理,主要業務邏輯:
- 省市區地址的資料庫的建立與查詢
- 使用者地址的增刪改查處理
- 設定預設地址
- 設定地址標題
在使用者錄入地址時,需要進行省市區的選擇。在頁面載入時,向後端請求省份資料,當用戶選擇確定省份後,向後端請求該省份的城市資料;在使用者選擇確定城市資料後,向後端請求該城市的區縣資訊。這個過程稱為省市區三級聯動。
省市區地址的三級聯動:
建立省市區的資料表,採用自關聯的方式;
資料表設計:
- 自關聯欄位的外來鍵指向自身, ForeignKey(‘self’)
- 使用 related_name 指明查詢一個行政區劃的所有下級行政區劃時,使用哪種語法查詢;
遷移資料庫,匯入資料
-
請求有兩種方式:
'list'
,'retrieve'
,list
請求省份資料,retrieve
根據上級 id 請求資料; -
讓檢視繼承自
ReadOnlyModelViewSet
,這個檢視集繼承自'mixins.RetrieveModelMixin,mixins.ListModelMixin,GenericViewSet',
會自動執行 list(多條資料)和 retrieve(單個數據)的查詢; -
重寫
get_queryset
和get_serializer_class
-
list 的查詢結果集和序列化器沒什麼難度,
-
retrieve 的查詢結果集在底層會自動以 id 為過濾條件來進行重新查詢,
class RetrieveModelMixin(object): """ Retrieve a model instance. """ def retrieve(self, request, *args, **kwargs): instance = self.get_object() # 返回過濾過的查詢結果集 serializer = self.get_serializer(instance) return Response(serializer.data)
-
retrieve 的序列化器需要查詢出子級資訊 subs,進行返回;
-
城市資訊和區劃資訊是同一個介面
使用快取
省市區的資料是經常被使用者查詢使用的,而且資料基本不變化,所以我們可以將省市區資料進行快取處理,減少資料庫的查詢次數。
在Django REST framework中使用快取,可以通過drf-extensions擴充套件來實現。
因為省市區檢視使用了檢視集,並且檢視集中有提供ListModelMixin和RetrieveModelMixin的擴充套件(由ReadOnlyModelViewSet提供),所以可以直接新增CacheResponseMixin擴充套件類,就相當於在 list 和 retrieve 方法添加了裝飾器 @cache_response,就可以使用快取了
在配置檔案中設定將快取資料儲存在 redis 中,設定有效期
當資料庫進行查詢時,會將快取儲存在 redis 中,下一次請求時會優先訪問快取
使用者地址管理:
建立使用者地址模型類,
新增檢視:使用者地址列表資料,儲存使用者地址資料,處理刪除(邏輯刪除),設定預設地址,修改標題
新增對應序列化器