暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

阿语Python项目实操之美多后台管理-商品管理之图片表管理第5.5.3节修改图片表数据

阿语python 2021-05-23
148

1、 获取修改图片的详情信息

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

接口分析

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

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

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

返回数据:JSON

 {
"id": "图片id",
"sku": "SKU商品id",
"image": "图片地址"
}

参数类型是否必须说明
idint"图片id"
skuintSKU商品id
iamgestr图片地址

后端实现


# 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商品图片"

参数类型是否必须说明
skustrSKU商品id
imageFielSKU商品图片

返回数据:JSON

 {
"id": "图片id",
"sku": "SKU商品id",
"image": "图片地址"
}

参数类型是否必须说明
idInt图片id
skuintSKU商品id
imagestr图片地址

后端实现

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


文章转载自阿语python,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论