1. 程式人生 > >Django 專案總結(5)- 地址管理

Django 專案總結(5)- 地址管理

地址管理

實現使用者地址的管理,主要業務邏輯:

  • 省市區地址的資料庫的建立與查詢
  • 使用者地址的增刪改查處理
  • 設定預設地址
  • 設定地址標題

在使用者錄入地址時,需要進行省市區的選擇。在頁面載入時,向後端請求省份資料,當用戶選擇確定省份後,向後端請求該省份的城市資料;在使用者選擇確定城市資料後,向後端請求該城市的區縣資訊。這個過程稱為省市區三級聯動。




省市區地址的三級聯動:

建立省市區的資料表,採用自關聯的方式;

資料表設計:

  • 自關聯欄位的外來鍵指向自身, ForeignKey(‘self’)
  • 使用 related_name 指明查詢一個行政區劃的所有下級行政區劃時,使用哪種語法查詢;
    遷移資料庫,匯入資料
  1. 請求有兩種方式:'list','retrieve'list 請求省份資料,retrieve 根據上級 id 請求資料;

  2. 讓檢視繼承自ReadOnlyModelViewSet,這個檢視集繼承自 'mixins.RetrieveModelMixin,mixins.ListModelMixin,GenericViewSet',會自動執行 list(多條資料)和 retrieve(單個數據)的查詢;

  3. 重寫 get_querysetget_serializer_class

    方法,進行判斷,對應兩種請求方式來寫對應的 查詢結果集 和 序列化器;

  4. list 的查詢結果集和序列化器沒什麼難度,

  5. 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)        
  1. retrieve 的序列化器需要查詢出子級資訊 subs,進行返回;

  2. 城市資訊和區劃資訊是同一個介面




使用快取

省市區的資料是經常被使用者查詢使用的,而且資料基本不變化,所以我們可以將省市區資料進行快取處理,減少資料庫的查詢次數。

在Django REST framework中使用快取,可以通過drf-extensions擴充套件來實現。

因為省市區檢視使用了檢視集,並且檢視集中有提供ListModelMixin和RetrieveModelMixin的擴充套件(由ReadOnlyModelViewSet提供),所以可以直接新增CacheResponseMixin擴充套件類,就相當於在 list 和 retrieve 方法添加了裝飾器 @cache_response,就可以使用快取了

在配置檔案中設定將快取資料儲存在 redis 中,設定有效期

當資料庫進行查詢時,會將快取儲存在 redis 中,下一次請求時會優先訪問快取




使用者地址管理:

建立使用者地址模型類,

新增檢視:使用者地址列表資料,儲存使用者地址資料,處理刪除(邏輯刪除),設定預設地址,修改標題

新增對應序列化器