Advertisement

商城——商品展示

阅读量:

商品展示

创建子应用 goods

复制代码
    python manage.py startapp goods

模型类创建:

导包

复制代码
    from django.db import models

商品类别表Category:类别名 cate_name

复制代码
    class Category(models.Model):
    cate_name=models.CharField(max_length=50,verbose_name='类别名')
    class Meta:
        db_table='category'
        verbose_name_plural='商品列表'
    def __str__(self):
        return self.cate_name

商品信息表Goods:商品名sku_name 价格price 售价selling_price 默认图片img 商品标题title 描述instruction 销量 count 库存stock cate类别外键 是否在销售online

复制代码
    class Goods(models.Model):
    sku_name=models.CharField(max_length=100,verbose_name='商品名')
    price=models.DecimalField(max_digits=13,decimal_places=2,verbose_name='商品价格')
    selling_price=models.DecimalField(max_digits=13,decimal_places=2,verbose_name='商品销售价格')
    img=models.CharField(max_length=200,verbose_name='商品默认图片')
    title=models.CharField(max_length=30,verbose_name='商品标题',null=True)
    instruction=models.TextField(verbose_name='商品描述信息')
    count=models.IntegerField(verbose_name='商品销售数量',default=0)
    stock=models.IntegerField(verbose_name='商品库存数量',default=0)
    cate=models.ForeignKey(Category,on_delete=models.CASCADE,verbose_name='商品类别')
    online=models.BooleanField('是否在售',default=True)
    class Meta:
        db_table='goods'
        verbose_name_plural='商品信息'
    def __str__(self):
        return self.sku_name

商品图片表GoodImg: 图片img 图片描述title good外键所属商品

复制代码
    class GoodImg(models.Model):
    img=models.CharField(max_length=200,verbose_name='图片')
    title=models.CharField(max_length=200,verbose_name='图片描述',null=True)
    good=models.ForeignKey(Goods,on_delete=models.CASCADE,verbose_name='所属商品')
    class Meta:
        db_table='goodimg'
        verbose_name_plural='商品图片'
    def __str__(self):
        return self.title

轮播图Carousel: imgPath图片路径 describes图片描述

复制代码
    class Carousel(models.Model):
    imgPath=models.CharField(max_length=200,verbose_name='轮播图路径')
    describes=models.CharField(max_length=200,verbose_name='图片描述',null=True)
    class Meta:
        db_table='carousel_t'
    def __str__(self):
        return self.describes

数据库中的表名:category goods goodimg carousel_t

复制代码
    from user.models import User
    class GoodsCollect(models.Model):
    user=models.ForeignKey(User,on_delete=models.CASCADE,verbose_name='用户')
    goods=models.ForeignKey(Goods,on_delete=models.CASCADE,verbose_name='商品')
    class Meta:
        verbose_name_plural='收藏表'
        db_table='good_collect'
    def __str__(self):
        return f'{self.user.username}:{self.goods.sku_name}'

序列化器

创建serializers.py 文件

复制代码
    from rest_framework import serializers
    from .models import Category,Goods,GoodImg,Carousel
    
    class CateSer(serializers.ModelSerializer):
    class Meta:
        model=Category
        fields='__all__'
    
    class GoodsSer(serializers.ModelSerializer):
    class Meta:
        model=Goods
        fields='__all__'
    
    class ImgSer(serializers.ModelSerializer):
    class Meta:
        model=GoodImg
        fields='__all__'
    class CarSer(serializers.ModelSerializer):
    class Meta:
        model=Carousel
        fields='__all__'

类似图

路由

复制代码
    from django.urls import path,include
    from . import views
    urlpatterns = [
    path('carousel/',views.GetCarousel.as_view()),
    path('oneCategory/all/', views.OneCategory.as_view()),
    path('getHotProduct/', views.HotProduct.as_view()),
    path('onegood/',views.OneGood.as_view()),
    path('onegood/imgs/',views.OneGoodImgs.as_view()),
    path('oneGood/history/', views.History.as_view()),
    ]

导包

复制代码
    from rest_framework.views import APIView
    from rest_framework.response import Response
    from .models import Category,Goods,GoodImg,Carousel,GoodsCollect
    from .serializers import CateSer,GoodsSer,ImgSer,CarSer

API:

功能 获取轮播图数据
请求方式 GET
请求地址 /goods/carousel/
成功响应 {“code”: 200, “msg”: “加载轮播图成功!”, “carousel”: 轮播图数据}
失败响应 {“code”: 204, “msg”: “加载轮播图失败!”}
复制代码
    class GetCarousel(APIView):
    def get(self,request):
        # 1.获取数据
        car_data=Carousel.objects.all()
        # 2.序列化 ORM操作数据->JSON数据
        ser=CarSer(car_data,many=True)
        return Response({
            'code':200,
            'msg':'加载轮播图成功',
            'carousel':ser.data
        })

API:

功能 获取一类商品详情
请求方式 GET
请求地址 /goods/oneCategory/all/
GET参数 categoryName:类别名
成功响应 {‘msg’:‘成功获取商品信息’,‘code’: 200,result:一类商品信息}
失败响应 {‘msg’:‘此商品类别不存在’,‘code’: 204}
复制代码
    class OneCategory(APIView):
    # 获取一类信息
    def get(self,request):
        # 1.获取种类信息
        cate_name=request.query_params.get('categoryName')
        # 2.ORM操作,获取种类信息
        try:
            cate_data=Category.objects.get(cate_name=cate_name)
        except Exception as e:
            print(e)
            return Response({'msg':'此商品类别不存在','code':204})
        # 3.根据类别 获取 商品信息
        goods_data=cate_data.goods_set.all()
        # 4.序列化商品信息
        ser=GoodsSer(goods_data,many=True)
        return Response({'msg':'成功获取热门商品信息',
                         'code':200,
                         'result':ser.data})

API:

功能 获取热门商品
请求方式 GET
请求地址 /goods/getHotProduct/
GET参数 categoryName:类别名(列表)
成功响应 {‘msg’:‘成功获取商品信息’,‘code’: 200,result:一类商品信息}
失败响应 {‘msg’:‘此商品类别不存在’,‘code’: 204}
复制代码
    # 获取热门商品信息
    class HotProduct(APIView):
    # 获取热门商品信息
    def get(self,request):
        # 1.获取种类信息,热门商品是一个列表
        cate_list = request.query_params.getlist('categoryName[]')
        # 2.根据类别名获取种类信息
        cate_data_list = []
        for i in cate_list:
            cate_data = Category.objects.get(cate_name=i)
            cate_data_list.append(cate_data)
            # 3.根据类别信息 获取 商品信息
        goods_data_list = []
        for i in cate_data_list:
            goods_data_list.append(i.goods_set.all())
        # 4.将商品信息合并
        from functools import reduce
        goods_data_queryset = reduce((lambda x,y:x|y),goods_data_list)
        # 5.序列化
        ser = GoodsSer(goods_data_queryset,many=True)
        return Response({
            'msg':'成功获取热门商品信息',
            'code':200,
            'result':ser.data
        })

1.cate_list = [冰箱, 洗衣机,电视机]
2.cate_data_list = [冰箱ORM, 洗衣机ORM,电视机ORM]
3.goods_data_list = [[美的ORM,海尔ORM],[小天鹅ORM,小米ORM,黑米ORM],[华为ORM,康佳ORM]]
4.goods_data_queryset= [美的ORM,海尔ORM,小天鹅ORM,小米ORM,黑米ORM,华为ORM,康佳ORM]

API设计

功能 获取一个商品的信息
请求方式 GET
请求地址 /goods/onegood/
GET参数 productID: 商品id
成功响应 序列化以后的商品信息
失败响应 {‘msg’:‘此商品不存在!’,‘code’:204}
复制代码
    class OneGood(APIView):
    def get(self,request):
        # 1.获取商品id
        good_id=request.query_params.get('productID')
        # 2.根据id查询数据
        try:
            good_data=Goods.objects.get(id=good_id)
        except Exception as e:
            print(e)
            return Response({'msg':'此商品不存在','code':204})
        # 3.序列化数据
        ser=GoodsSer(good_data)
        return Response(ser.data)

API设计

功能 获取一个商品的轮播图
请求方式 GET
请求地址 /goods/onegood/imgs/
GET参数 productID: 商品id
成功响应 序列化以后的商品图片信息
失败响应 {‘msg’:‘图片不存在!’,‘code’:204}
复制代码
    class OneGoodImgs(APIView):
    # 获取一个商品的相关图片
    def get(self,request):
        # 1.获取商品id
        good_id = request.query_params.get('productID')
        # 2.根据id查询数据
        try:
            good_data = Goods.objects.get(id=good_id)
        except Exception as e:
            print(e)
            return Response({'msg': '图片不存在', 'code': 204})
        # 3.根据商品获取图片
        imgs_data=good_data.goodimg_set.all()
        # 4.序列化数据
        ser=ImgSer(imgs_data,many=True)
        return Response(ser.data)

全部评论 (0)

还没有任何评论哟~