用戶瀏覽歷史記錄
-
我們將瀏覽數據存儲在redis中, 存儲的數據形式如下
'history_%s' % user.id: [sku_id, sku_id, ...]
-
當瀏覽頁面詳情頁時, 前端發送sku_id給後端, 後端通過user_id儲存在redis中
# 視圖如下,post方法滿足要求 class UserHistory(CreateAPIView): serializer_class = UserHistorySerializer #序列化器重寫create方法 class UserHistorySerializer(serializer.Serializer): # 增加顯示指明字段 sku_id=serializer.IntegerField(min_value=1) def validate(self,attrs): try: sku=SKU.objects.get(id=attrs['sku_id']) except: return Response({'error':'數據不存在'}) return attrs def create(self,attrs): user = self.context.get('request').user conn = get_redis_connection('history') sku_id=attrs['skud_id'] # 首先刪除列表裏的陳舊數據 conn.lrem('history_%s'%user.id,0,sku_id) # 增加新的數據 conn.lpush('history_%s'%user.id,0,sku_id) # 設置數據保存上限 conn.ltrim('history_%s'%user.id,0,10) # 沒有對象返回字典對象 return attrs
-
在用戶中心頁面, 前端發送GET /browse_histories/ 請求, 後端返回sku數據
# 前端發送請求後, 後端根據user_id從數據庫找出上面存儲的sku_id列表, 然後序列化返回對象數據就行了 # 對上面的視圖進行修改使用 class UserHistory(ListCreateAPIView): def get_serilizer_class(self): if self.request.method=='GET': return UserHistorySerializer else: return SkuSerializer # 對查詢集做修改 def get_queryset(self): conn = get_redis_connection('history') user=self.request.user sku_list=conn.lrange('history_%s'%user.id,0,10) skus=SKU.objects.filter(id__in=sku_list) return skus class SkuSerializer(serializer.Serializer): model=SKU fields=("id","name","price","default_image_url","comments")