IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 商城——商品展示 -> 正文阅读

[Python知识库]商城——商品展示

商品展示

创建子应用 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)
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:19:02  更:2022-07-17 16:20:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 12:01:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码