您当前的位置: 首页 > 

IT之一小佬

暂无认证

  • 0浏览

    0关注

    1192博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

SPU表管理之保存SPU表数据

IT之一小佬 发布时间:2021-07-29 23:01:30 ,浏览量:0

保存SPU表数据

在保存数据之前我们需要先获取品牌名称和分类信息

1、获取品牌信息

接口分析

请求方式: GET /meiduo_admin/goods/brands/simple

    #  获取品牌信息
    url(r'goods/brands/simple/$', spus.SPUSView.as_view({'get': 'brand'})),

请求参数: 通过请求头传递jwt token数据。

返回数据: JSON

 [
        {
            "id": 1,
            "name": "Apple"
        },
        {
            "id": 2,
            "name": "华为(HUAWEI)"
        }
    ]
返回值类型是否必须说明Idint是商品品牌idname数组是商品品牌名称 后端实现
from rest_framework.viewsets import ModelViewSet
from meiduo_admin.serializers.spus import SPUGoodsSerializer, SPUBrandsSerializer, CategorysSerializer
from goods.models import SPU, Brand, GoodsCategory
from meiduo_admin.utils import UserPageNum
from rest_framework.response import Response


class SPUSView(ModelViewSet):
    """
        spu表的增删改查
    """
    serializer_class = SPUBrandsSerializer
    queryset = SPU.objects.all()
    pagination_class = UserPageNum

    # 在类中跟定义获取品牌数据的方法
    def brand(self, request):
        # 1、查询所有品牌数据
        data = Brand.objects.all()
        # 2、序列化返回品牌数据
        ser = SPUBrandsSerializer(data, many=True)

        return Response(ser.data)


序列化器的定义

class SPUBrandsSerializer(serializers.ModelSerializer):
    """
        SPU表品牌序列化器
    """
    class Meta:
        model = Brand
        fields = "__all__"

运行效果:

2、获取一级分类信息

接口分析

请求方式: GET meiduo_admin/goods/channel/categories/

    #  获取一级分类
    url(r'goods/channel/categories/$', spus.SPUSView.as_view({'get': 'channel'})),

请求参数: 通过请求头传递jwt token数据。

返回数据: JSON

 [
        {
            "id": "一级分类id",
            "name": "一级分类名称"
        },
        ...
    ]
返回值类型是否必须说明Idint是一级分类IDname数组是一级分类名称

后端实现

from rest_framework.viewsets import ModelViewSet
from meiduo_admin.serializers.spus import SPUGoodsSerializer, SPUBrandsSerializer, CategorysSerializer
from goods.models import SPU, Brand, GoodsCategory
from meiduo_admin.utils import UserPageNum
from rest_framework.response import Response



class SPUSView(ModelViewSet):
    """
        spu表的增删改查
    """
    serializer_class = SPUBrandsSerializer
    queryset = SPU.objects.all()
    pagination_class = UserPageNum

    # 在类中跟定义获取品牌数据的方法
    def brand(self, request):
        # 1、查询所有品牌数据
        data = Brand.objects.all()
        # 2、序列化返回品牌数据
        ser = SPUBrandsSerializer(data, many=True)

        return Response(ser.data)

    def channel(self, request):
        # 1、获取一级分类数据
        data = GoodsCategory.objects.filter(parent=None)
        # 2、序列化返回分类数据
        ser = CategorysSerializer(data, many=True)
        return Response(ser.data)


定义序列化器

class CategorysSerializer(serializers.ModelSerializer):
    """
        SPU表分类信息获取序列化器
    """
    class Meta:
        model=GoodsCategory
        fields="__all__"

运行效果:

3、获取二级和三级分类

接口分析

请求方式: GET /meiduo_admin/goods/channel/categories/(?P\d+)/

    #  获取二级三级分类
    url(r'goods/channel/categories/(?P\d+)/$', spus.SPUSView.as_view({'get': 'channels'})),

请求参数: 通过请求头传递jwt token数据。

在路径中传递当前分类商品id

返回数据: JSON

 [
        {
            "id": "当前分类id",
            "name": "当前分类名称"
        },
        ...
    ]
返回值类型是否必须说明Idint是分类idnameStr是分类名称

后端实现

from rest_framework.viewsets import ModelViewSet
from meiduo_admin.serializers.spus import SPUGoodsSerializer, SPUBrandsSerializer, CategorysSerializer
from goods.models import SPU, Brand, GoodsCategory
from meiduo_admin.utils import UserPageNum
from rest_framework.response import Response



class SPUSView(ModelViewSet):
    """
        spu表的增删改查
    """
    serializer_class = SPUBrandsSerializer
    queryset = SPU.objects.all()
    pagination_class = UserPageNum

    # 在类中跟定义获取品牌数据的方法
    def brand(self, request):
        # 1、查询所有品牌数据
        data = Brand.objects.all()
        # 2、序列化返回品牌数据
        ser = SPUBrandsSerializer(data, many=True)

        return Response(ser.data)

    def channel(self, request):
        # 1、获取一级分类数据
        data = GoodsCategory.objects.filter(parent=None)
        # 2、序列化返回分类数据
        ser = CategorysSerializer(data, many=True)
        return Response(ser.data)

    def channels(self, request, pk):
        # 1、获取二级和三级分类数据
        data = GoodsCategory.objects.filter(parent_id=pk)
        # 2、序列化返回分类数据
        ser = CategorysSerializer(data, many=True)
        return Response(ser.data)

运行效果:

 若上面代码运行出错,修改前端代码:

4、上传图片

接口分析

请求方式:POST goods/images

    #  上传图片
    url(r'goods/images/$', spus.SPUSView.as_view({'post': 'image'})),

请求参数: 通过请求头传递jwt token数据。

同时携带图片文件数据发送后段

返回数据: JSON

{
   {
      'img_url': settings.FDFS_URL+image_url 
    }
}
参数类型是否必须说明Img_url字符串是完整的图片保存地址

后端实现:

from rest_framework.viewsets import ModelViewSet
from meiduo_admin.serializers.spus import SPUGoodsSerializer, SPUBrandsSerializer, CategorysSerializer
from goods.models import SPU, Brand, GoodsCategory
from meiduo_admin.utils import UserPageNum
from rest_framework.response import Response
from fdfs_client.client import Fdfs_client
from django.conf import settings


class SPUSView(ModelViewSet):
    """
        spu表的增删改查
    """
    serializer_class = SPUBrandsSerializer
    queryset = SPU.objects.all()
    pagination_class = UserPageNum

    # 在类中跟定义获取品牌数据的方法
    def brand(self, request):
        # 1、查询所有品牌数据
        data = Brand.objects.all()
        # 2、序列化返回品牌数据
        ser = SPUBrandsSerializer(data, many=True)

        return Response(ser.data)

    def channel(self, request):
        # 1、获取一级分类数据
        data = GoodsCategory.objects.filter(parent=None)
        # 2、序列化返回分类数据
        ser = CategorysSerializer(data, many=True)
        return Response(ser.data)

    def channels(self, request, pk):
        # 1、获取二级和三级分类数据
        data = GoodsCategory.objects.filter(parent_id=pk)
        # 2、序列化返回分类数据
        ser = CategorysSerializer(data, many=True)
        return Response(ser.data)

    def image(self, request):
        """
            保存图片
        :param request:
        :return:
        """
        # 1、获取图片数据
        data = request.FILES.get('image')
        # 验证图片数据
        if data is None:
            return Response(status=500)

        # 2、建立fastDFS连接对象
        client = Fdfs_client(settings.FASTDFS_PATH)

        # 3、上传图片
        res = client.upload_by_buffer(data.read())

        # 4、判断上传状态
        if res['Status'] != 'Upload successed.':
            return Response({'error': '上传失败'}, status=501)

        # 5、获取上传的图片路径
        image_url = res['Remote file_id']

        # 6、结果返回
        return Response(
            {
                'img_url': settings.FDFS_URL + image_url
            },
            status=201
        )
5、保存SPU数据

接口分析

请求方式:POST meiduo_admin/goods/

    #  保存spu数据
    # url(r'goods/$', spus.SPUGoodsView.as_view({'post': 'list'}))  # 自动路由会生成这个路由的

请求参数: 通过请求头传递jwt token数据。

参数类型是否必须说明namestr是SPU名称brand_idint是商品SPU IDcategory1_idstr是商品副标题category2_idint是三级分类IDcategory3_idint是价格desc_detailstr是进价desc_packstr是市场价desc_servicestr是库存

返回数据: JSON

 {
        "id": "商品SPU ID",
        "name": "SPU名称",
        "brand": "品牌名称",
        "brand_id": "品牌id",
        "category1_id": "一级分类id",
        "category2_id": "二级分类id",
        "category3_id": "三级分类id",
        "sales": "SPU商品销量",
        "comments": "SPU商品评论量",
        "desc_detail": "商品详情",
        "desc_pack": "商品包装",
        "desc_service": "售后服务"
   }
参数类型是否必须说明idInt是商品SPU IDnameStr是商品SPU 名称brandstr是品牌名称brand_idint是品牌idcategory1_idint是一级分类idcategory2_idint是二级分类idcategory3_idint是三级分类idsalesint是SPU商品销量commentsint是SPU商品评论量desc_detailstr是商品详情desc_packstr是商品包装desc_servicestr是售后服务

后端实现

# SPUGoodsView继承的是ModelViewSet 所以保存逻辑还是使用同一个类视图
class SPUGoodsView(ModelViewSet):
    """
        SPU表
    """
    serializer_class = SPUGoodsSerialzier
    queryset = SPU.objects.all()
    pagination_class = PageNum
关注
打赏
1665675218
查看更多评论
立即登录/注册

微信扫码登录

0.0398s