商品展示
创建子应用 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):
car_data=Carousel.objects.all()
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):
cate_name=request.query_params.get('categoryName')
try:
cate_data=Category.objects.get(cate_name=cate_name)
except Exception as e:
print(e)
return Response({'msg':'此商品类别不存在','code':204})
goods_data=cate_data.goods_set.all()
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):
cate_list = request.query_params.getlist('categoryName[]')
cate_data_list = []
for i in cate_list:
cate_data = Category.objects.get(cate_name=i)
cate_data_list.append(cate_data)
goods_data_list = []
for i in cate_data_list:
goods_data_list.append(i.goods_set.all())
from functools import reduce
goods_data_queryset = reduce((lambda x,y:x|y),goods_data_list)
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):
good_id=request.query_params.get('productID')
try:
good_data=Goods.objects.get(id=good_id)
except Exception as e:
print(e)
return Response({'msg':'此商品不存在','code':204})
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):
good_id = request.query_params.get('productID')
try:
good_data = Goods.objects.get(id=good_id)
except Exception as e:
print(e)
return Response({'msg': '图片不存在', 'code': 204})
imgs_data=good_data.goodimg_set.all()
ser=ImgSer(imgs_data,many=True)
return Response(ser.data)
|