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来完成分页