商城——商品展示
发布时间
阅读量:
阅读量
商品展示
创建子应用 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}'
序列化器
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)
全部评论 (0)
还没有任何评论哟~
