DRF学习之DRF的视图序列化与分页(五)

1.安装所需依赖包

安装django-guard 用来支持对象级别的权限
安装 coreapi 用来支持django的文档

2.配置settings文件

在这里插入图片描述

3.配置url,调试api的时候会用到

url(r’^api-auth/’, include(‘rest_framework.urls’, namespace=‘rest_framework’)),

4.创建一个serializer文件,自己来写Serializer的详细序列化。类似与django的form

from rest_framework import serializers


class GoodsSerializer(serializers.Serializer):
    name = serializers.CharField(max_length=300, required=True)
    shop_price = serializers.FloatField(default=0)

5.在goods下的views创建一个继承了APIView类的视图

from rest_framework.views import APIView
from rest_framework.response import Response
from .models import Goods
from .serializers import GoodsSerializer


class GoodsListView(APIView):
    """
    显示所有的商品列表
    """
    def get(self, request, format=None):
        all_goods = Goods.objects.all()
        serializer = GoodsSerializer(all_goods, many=True)
        return Response(serializer.data)

注:列表要加一个many=True说明此数据是列表数据,会被序列化成list数组

6.配置url文件,在urlpatterns配置访问路径

    url(r'goods/', GoodsListView.as_view(), name='goods_list'),

然后就可以通过访问路径获取到数据了
注:serializers.py文件可以控制哪些是需要序列化的字段,现在只是name与shop_price 字段进行了序列化,如果还有需要序列化的字段可以修改serializers.py文件。

7.利用modelserializer使序列化更简单

修改GoodsSerializer

from rest_framework import serializers
from .models import Goods


class GoodsSerializer(serializers.ModelSerializer):
    class Meta:
        model = Goods
        fields = ('name', 'click_num', 'market_price', 'add_time')

如果这么设置会直接全部序列化

class GoodsSerializer(serializers.ModelSerializer):
    class Meta:
        model = Goods
        fields = "__all__"

当然有的时候需要序列化的嵌套,比如我们想要获取到goods的分类外键的全部字段数据的话就可以在goods进行序列化的同时实例化分类。

#先创建分类的Serializer
class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = GoodsCategory
        fields = "__all__"

#在goods的Serializer中实例化CategorySerializer
class GoodsSerializer(serializers.ModelSerializer):
    category = CategorySerializer()
    class Meta:
        model = Goods
        fields = "__all__"

8.配置分页

局部的分页配置

from rest_framework import generics
from rest_framework.pagination import PageNumberPagination
from .models import Goods
from .serializers import GoodsSerializer


class GoodsPagination(PageNumberPagination):
    page_size = 12  # 默认每一页个数
    page_size_query_param = 'page_size'
    page_query_param = 'page'  # 参数?p=xx
    max_page_size = 100  # 最大指定每页个数


class GoodsListView(generics.ListAPIView):
    """
    显示所有的商品列表
    """
    queryset = Goods.objects.all()
    serializer_class = GoodsSerializer
    pagination_class = GoodsPagination

全局配置:通过配置settings来完成分页
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值