第一步: 学会使用ModelSerializer, 并且会使用ModelSerializer相互嵌套功能

1. goods.serializers.py

from rest_framework import serializers

from goods.models import Goods, GoodsCategory

# 让goods的category字段全量显示
class CategorySerializer(serializers.ModelSerializer):
class Meta:
model = GoodsCategory
fields = "__all__" # 取所有字段 # 方式一
# class GoodsSerializer(serializers.Serializer):
# name = serializers.CharField(required=True, max_length=100)
# click_num = serializers.IntegerField(default=0)
# goods_front_image=serializers.ImageField() # 方式二: 用ModelSerializer
class GoodsSerializer(serializers.ModelSerializer):
category = CategorySerializer() # 重写category字段,从而实现ModelSerializer的嵌套 class Meta:
model = Goods
# fields = ("name", "click_num", "market_price", "add_time")
fields = "__all__" # 取所有字段

2 . 刷新网页看看结果

第二步: 使用Mixin来实现返回

goods.views.py

from rest_framework import mixins
from rest_framework import generics
from rest_framework.views import APIView
from rest_framework.response import Response from .models import Goods
from .serializers import GoodsSerializer # # 方式一, APIview继承了View
# class GoodsListView(APIView):
# """
# List all snippets, or create a new snippet.
# """
#
# def get(self, request, format=None):
# goods = Goods.objects.all()[:10]
# goods_serializer = GoodsSerializer(goods, many=True) # many:是否是querrySet对象
# return Response(goods_serializer.data) # # 方式二: 利用mixins.ListModelMixin, generics.GenericAPIView
# class GoodsListView(mixins.ListModelMixin, generics.GenericAPIView):
# """
# 商品列表页
# """
# queryset = Goods.objects.all()[:10]
# serializer_class = GoodsSerializer
#
# def get(self, request, *args, **kwargs):
# return self.list(request, *args, **kwargs) # # 方式三,使用更加简便的generics.ListAPIView
# # 原理就是: ListAPIView里面继承了mixins.ListModelMixin, generics.GenericAPIView, 而且还封装了返回
class GoodsListView(generics.ListAPIView):
"""
商品列表页
"""
queryset = Goods.objects.all()
serializer_class = GoodsSerializer

第三步: 分页的设置

方法一: 在settings里面设置REST_FRAMEWORK分页参数

settings.py

REST_FRAMEWORK = {
# 解决 1.11.3版本下使用APIview会报'CSRFCheck' object has no attribute 'process_request'的问题
# "DEFAULT_AUTHENTICATION_CLASSES": [], 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10,
}

接着去刷新网页

还有下面这个img字段的url的拼接, 也是genericAPIView帮我们完成的

方法二: 在goods.view里面重写PageNumberPagination, 从而达到动态分页的目的, 这样前端就想怎么取就怎么取

goods.view.py

from rest_framework import mixins
from rest_framework import generics
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.pagination import PageNumberPagination # 自定义分页 from .models import Goods
from .serializers import GoodsSerializer # 自定义分页功能, 并实现动态分页, 继承PageNumberPagination
class GoodsPagination(PageNumberPagination):
page_size = 10
page_size_query_param = 'page_size' # 指定每一页显示多少条
page_query_param = "p" # 指定要第几页
max_page_size = 100 class GoodsListView(generics.ListAPIView):
"""
商品列表页
"""
queryset = Goods.objects.all()
serializer_class = GoodsSerializer
pagination_class = GoodsPagination # 需要指定分页的类

刷新网页试试

------ over  ------

最新文章

  1. Hibernate 系列 08 - 对象识别机制
  2. Leetcode--Merge Two Sorted Lists
  3. Android进程管理及静态变量垃圾回收
  4. vi用法
  5. SqlServer基础:类型转换Cast和Convert
  6. css读书笔记4:字体和文本
  7. Open vSwitch FAQ (三)
  8. 读书笔记:Ross:概率模型导论:方差和协方差
  9. volley(4) 请求参数:data:[ { bar_remain:XX , bar_code:"XX" , bar_id: XX}], method:GET
  10. openssl生成rsa公私钥
  11. linux环境下配置github远程仓库
  12. NekoHTML and Dom4j
  13. 在JavaScript函数中使用EL表达式注意的事项
  14. bat执行java程序的脚本解析
  15. .NET单元测试艺术(1) - 单元测试的基本知识
  16. Android敏感词过滤主要类
  17. 【Python 14】分形树绘制2.0(重复五角星+Turtle库文档)
  18. eclipse中补齐代码的快捷键
  19. Python_字典及其操作
  20. Shell基础知识(二)

热门文章

  1. flutter 编译报错 ../extended_network_image_provider.dart:63:41: Error: Type 'DecoderCallback' not found
  2. Charles破解注册
  3. [Luogu P1230]智力大冲浪
  4. mysql远程服务密码修改
  5. Active Directory 常用属性
  6. 【线性代数】6-5:正定矩阵(Positive Definite Matrices)
  7. vue怎么引入echats并使用 (柱状图 字符云)
  8. 为一台全新的电脑构建JavaEE开发环境
  9. hive 调优(二)参数调优汇总
  10. Flutter控制某个TextField获取焦点及失去焦点