前言vue
要求python
Package Versionmysql
certifi 2020.4.5.1
chardet 3.0.4
coreapi 2.3.1
coreschema 0.0.4
Django 1.11.3
django-cors-headers 2.1.0
django-crispy-forms 1.6.1
django-filter 1.0.4
django-formtools 2.0
django-guardian 1.4.9
django-reversion 2.0.9
djangorestframework 3.6.3
djangorestframework-jwt 1.11.0
future 0.16.0
httplib2 0.9.2
idna 2.9
itypes 1.2.0
Jinja2 2.11.2
Markdown 2.6.8
MarkupSafe 1.1.1
mysqlclient 1.3.10
olefile 0.46
Pillow 4.2.1
pip 20.0.2
PyJWT 1.7.1
pytz 2019.3
requests 2.23.0
setuptools 46.1.3
six 1.10.0
uritemplate 3.0.1
urllib3 1.25.9
wheel 0.34.2
XlsxWriter 0.9.8
xlwt 1.2.0git
流程github
在goods文件夹下filters.py的代码以下:web
import django_filters from django.db.models import Q from .models import Goods class GoodsFilter(django_filters.rest_framework.FilterSet): """ 商品的过滤类 """ pricemin = django_filters.NumberFilter(name='shop_price', help_text="最低价格",lookup_expr='gte') pricemax = django_filters.NumberFilter(name='shop_price', lookup_expr='lte') top_category = django_filters.NumberFilter(method='top_category_filter') def top_category_filter(self, queryset, name, value): return queryset.filter(Q(category_id=value)|Q(category__parent_category_id=value)|Q(category__parent_category__parent_category_id=value)) class Meta: model = Goods fields = ['pricemin', 'pricemax']
goods文件夹下serializers.py代码以下:sql
from rest_framework import serializers from django.db.models import Q from goods.models import Goods, GoodsCategory,HotSearchWords,GoodsImage,Banner,GoodsCategoryBrand class CategorySerializer3(serializers.ModelSerializer): class Meta: model = GoodsCategory fields = "__all__" class CategorySerializer2(serializers.ModelSerializer): sub_cat = CategorySerializer3(many=True) class Meta: model = GoodsCategory fields = "__all__" class CategorySerializer(serializers.ModelSerializer): sub_cat = CategorySerializer2(many=True) class Meta: model = GoodsCategory fields = "__all__" class GoodsImageSerializer(serializers.ModelSerializer): class Meta: model = GoodsImage fields = ("image", ) class GoodsSerializer(serializers.ModelSerializer): category = CategorySerializer() images = GoodsImageSerializer(many=True) class Meta: model = Goods fields = "__all__" class GoodCategorySerializer(serializers.ModelSerializer): ''' 商品类别序列化 ''' class Meta: model = Goods fields = "__all__" class HotWordsSerializer(serializers.ModelSerializer): class Meta: model = HotSearchWords fields = "__all__" class BannerSerializer(serializers.ModelSerializer): class Meta: model = Banner fields = "__all__" class BrandSerializer(serializers.ModelSerializer): class Meta: model = GoodsCategoryBrand fields = "__all__"
goods文件夹下views.py代码以下:django
from rest_framework.views import APIView from rest_framework.response import Response from rest_framework import mixins from rest_framework import generics from rest_framework import filters from rest_framework.pagination import PageNumberPagination from django_filters.rest_framework import DjangoFilterBackend from rest_framework import viewsets from rest_framework.authentication import TokenAuthentication from .models import Goods,GoodsCategory,HotSearchWords from .serializers import GoodsSerializer,CategorySerializer,HotWordsSerializer from .filters import GoodsFilter # Create your views here. class GoodsPagination(PageNumberPagination): page_size = 12 page_size_query_param = 'page_size' page_query_param = "page" max_page_size = 100 class GoodsListViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet): """ 商品列表页, 分页, 搜索, 过滤, 排序 """ queryset = Goods.objects.all() serializer_class = GoodsSerializer pagination_class = GoodsPagination # authentication_classes = (TokenAuthentication, ) filter_backends = (DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter) filter_class = GoodsFilter search_fields = ('name', 'goods_brief', 'goods_desc') ordering_fields = ('sold_num', 'add_time') class CategoryViewset(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet): """ list: 商品分类列表数据 retrieve: 获取商品分类详情 """ queryset = GoodsCategory.objects.filter(category_type=1) serializer_class = CategorySerializer class HotSearchsViewset(mixins.ListModelMixin, viewsets.GenericViewSet): """ 获取热搜词列表 """ queryset = HotSearchWords.objects.all().order_by("-index") serializer_class = HotWordsSerializer
修改api.js文件中商品详情ip
api
后台测试发现正常返回数据cors
查看商品详情页信息,正常显示
若添加商品为热销,须要在xadmin后台管理中添加