更新SKU表数据
1、 获取修改图片的详情信息
点就修改按钮时,我们需要先获取要修改的图片详情信息
接口分析
请求方式: GET /meiduo_admin/skus/images/(?P<pk>\d+)/
请求参数: 通过请求头传递jwt token数据。
在头部中携带要获取的图片商品ID
返回数据: JSON
 {
        "id": "图片id",
        "sku": "SKU商品id",
        "image": "图片地址"
    }
| 参数 | 类型 | 是否必须 | 说明 | 
|---|---|---|---|
| id | int | 是 | "图片id" | 
| sku | int | 是 | SKU商品id | 
| iamge | str | 是 | 图片地址 | 
后端实现
# ImageView继承的是ModelViewSet 所以还是使用同一个类视图
class ImageView(ModelViewSet):
    serializer_class = ImageSeriazlier
    queryset = SKUImage.objects.all()
    pagination_class = PageNum
        # 获取关联的sku表数据
    def simple(self, request):
        data = SKU.objects.all()
        ser = SKUSeriazlier(data, many=True)
        return Response(ser.data)
    # 重写拓展类的保存业务逻辑
    def create(self, request, *args, **kwargs):
          # 创建FastDFS连接对象
        client = Fdfs_client(settings.FASTDFS_PATH)
        # 获取前端传递的image文件
        data = request.FILES.get('image')
        # 上传图片到fastDFS
        res = client.upload_by_buffer(data.read())
        # 判断是否上传成功
        if res['Status'] != 'Upload successed.':
            return Response(status=403)
        # 获取上传后的路径
        image_url = res['Remote file_id']
        # 获取sku_id
        sku_id = request.data.get('sku')[0]
        # 保存图片
        image = SKUImage.objects.create(sku_id=sku_id, image=image_url)
                # 返回结果
        return Response(
            {
                'id': image.id,
                'sku': sku_id,
                'image': image.image.url
            },
            status=201  # 前端需要接受201状态码
        )
2、更新图片
接口分析
请求方式: PUT   /meiduo_admin/skus/images/(?P<pk>\d+)/
请求参数: 通过请求头传递jwt token数据。
表单提交数据:
        "sku": "SKU商品id",
        "image": "SKU商品图片"
| 参数 | 类型 | 是否必须 | 说明 | 
|---|---|---|---|
| sku | str | 是 | SKU商品id | 
| image | Fiel | 是 | SKU商品图片 | 
返回数据: JSON
 {
        "id": "图片id",
        "sku": "SKU商品id",
        "image": "图片地址"
    }
| 参数 | 类型 | 是否必须 | 说明 | 
|---|---|---|---|
| id | Int | 是 | 图片id | 
| sku | int | 是 | SKU商品id | 
| image | str | 是 | 图片地址 | 
后端实现
from django.conf import settings
from rest_framework.viewsets import ModelViewSet
from rest_framework.response import Response
from fdfs_client.client import Fdfs_client
from meiduo_admin.serializers.image import ImageSeriazlier, SKUSeriazlier
from meiduo_admin.utils.pagenum import PageNum
from goods.models import SKUImage, SKU
class ImageView(ModelViewSet):
    serializer_class = ImageSeriazlier
    queryset = SKUImage.objects.all()
    pagination_class = PageNum
    def simple(self, request):
        data = SKU.objects.all()
        ser = SKUSeriazlier(data, many=True)
        return Response(ser.data)
        # 重写拓展类的保存业务逻辑
    def create(self, request, *args, **kwargs):
        client = Fdfs_client(settings.FASTDFS_PATH)
        data = request.FILES.get('image')
        res = client.upload_by_buffer(data.read())
        if res['Status'] != 'Upload successed.':
            return Response(status=403)
        image_url = res['Remote file_id']
        sku_id = request.data.get('sku')[0]
        image = SKUImage.objects.create(sku_id=sku_id, image=image_url)
        return Response(
            {
                'id': image.id,
                'sku': sku_id,
                'image': image.image.url
            },
            status=201
        )
        # 重写拓展类的更新业务逻辑
    def update(self, request, *args, **kwargs):
        # 创建FastDFS连接对象
        client = Fdfs_client(settings.FASTDFS_PATH)
        # 获取前端传递的image文件
        data = request.FILES.get('image')
        # 上传图片到fastDFS
        res = client.upload_by_buffer(data.read())
        # 判断是否上传成功
        if res['Status'] != 'Upload successed.':
            return Response(status=403)
        # 获取上传后的路径
        image_url = res['Remote file_id']
        # 获取sku_id
        sku_id = request.data.get('sku')[0]
        # 查询图片对象
        img=SKUImage.objects.get(id=kwargs['pk'])
        # 更新图片
        img.image=image_url
        img.save()
           # 生成新的详情页页面
        get_detail_html.delay(img.sku.id)
        # 返回结果
        return Response(
            {
                'id': img.id,
                'sku': sku_id,
                'image': img.image.url
            },
            status=201  # 前端需要接受201状态码
        )