class UserInfoView(LoginRequiredMixin, View):'''用戶中心-信息頁'''def get(self, request):'''顯示'''# Django會給request對象添加一個屬性request.user# 如果用戶未登錄->user是AnonymousUser類的一個實例對象# 如果用戶登錄->user是User類的一個實例對象# request.user.is_authenticated()# 獲取用戶的個人信息user = request.useraddress = Address.objects.get_default_address(user)# 獲取用戶的歷史瀏覽記錄# from redis import StrictRedis# sr = StrictRedis(host='172.16.179.130', port='6379', db=9)con = get_redis_connection('default')history_key = 'history_%d'%user.id# 獲取用戶最新瀏覽的5個商品的idsku_ids = con.lrange(history_key, 0, 4) # [2,3,1]# 從數據庫中查詢用戶瀏覽的商品的具體信息# goods_li = GoodsSKU.objects.filter(id__in=sku_ids)## goods_res = []# for a_id in sku_ids:# for goods in goods_li:# if a_id == goods.id:# goods_res.append(goods)# 遍歷獲取用戶瀏覽的商品信息goods_li = []for id in sku_ids:goods = GoodsSKU.objects.get(id=id)goods_li.append(goods)# 組織上下文context = {'page':'user','address':address,'goods_li':goods_li}# 除了你給模板文件傳遞的模板變量之外,django框架會把request.user也傳給模板文件return render(request, 'user_center_info.html', context)
其中靜態文件user_center_info.html中如下:
<h3 class="common_title2">最近瀏覽</h3><div class="has_view_list"><ul class="goods_type_list clearfix">{% for goods in goods_li %}<li><a href="detail.html"><img src="{{ goods.image.url }}"></a><h4><a href="detail.html">{{ goods.name }}</a></h4><div class="operate"><span class="prize">¥{{ goods.price }}</span><span class="unit">{{ goods.price }}/{{ goods.unite }}</span><a href="#" class="add_goods" title="加入購物車"></a></div></li>{% empty %}無歷史瀏覽記錄{% endfor %}</ul></div>
相關模塊代碼:
商品模型類中goods–models.py
class GoodsSKU(BaseModel):'''商品SKU模型類'''status_choices = ((0, '下線'),(1, '上線'),)type = models.ForeignKey('GoodsType', verbose_name='商品種類')goods = models.ForeignKey('Goods', verbose_name='商品SPU')name = models.CharField(max_length=20, verbose_name='商品名稱')desc = models.CharField(max_length=256, verbose_name='商品簡介')price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='商品價格')unite = models.CharField(max_length=20, verbose_name='商品單位')image = models.ImageField(upload_to='goods', verbose_name='商品圖片')stock = models.IntegerField(default=1, verbose_name='商品庫存')sales = models.IntegerField(default=0, verbose_name='商品銷量')status = models.SmallIntegerField(default=1, choices=status_choices, verbose_name='商品狀態')
django-redis獲取redis鏈接
# Django的緩存配置
CACHES = {"default": {"BACKEND": "django_redis.cache.RedisCache","LOCATION": "redis://172.16.179.130:6379/9","OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient",}}
}