您当前的位置: 首页 > 

IT之一小佬

暂无认证

  • 0浏览

    0关注

    1192博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

图片管理之更新SKU表数据

IT之一小佬 发布时间:2021-07-29 18:49:21 ,浏览量:0

更新SKU表数据 1、 获取修改图片的详情信息

点就修改按钮时,我们需要先获取要修改的图片详情信息

接口分析

请求方式: GET /meiduo_admin/skus/images/(?P\d+)/

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

在头部中携带要获取的图片商品ID

返回数据: JSON

 {
        "id": "图片id",
        "sku": "SKU商品id",
        "image": "图片地址"
    }
参数类型是否必须说明idint是"图片id"skuint是SKU商品idiamgestr是图片地址

后端实现


# 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\d+)/

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

表单提交数据:
        "sku": "SKU商品id",
        "image": "SKU商品图片"
参数类型是否必须说明skustr是SKU商品idimageFiel是SKU商品图片

返回数据: JSON

 {
        "id": "图片id",
        "sku": "SKU商品id",
        "image": "图片地址"
    }
参数类型是否必须说明idInt是图片idskuint是SKU商品idimagestr是图片地址

后端实现

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
from celery_tasks.static_file.tasks import get_detail_html


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状态码
        )

注意事项:这儿更新操作必须重新修改父类代码,否则修改后的图片地址在数据库中是空的

 【上面的create重写父类的方法都可以封装到序列化器中,视图方法中就可以不用写了,序列化器中封装好后,视图中的代码会继承父类的代码直接完成更新操作,方法和图片保存处的代码操作是一样的,这儿不在修改了】

关注
打赏
1665675218
查看更多评论
立即登录/注册

微信扫码登录

0.0425s