APIView的基本使用
1.先下载一个模块
安装drf:pip3 install djangorestframework
# 需要注意的是django版本的和下载的模块的版本适配问题
导入模块:from rest_framework.views import APIView
# 这里需要注意路由的编写 as_view()
序列化组件
# drf提供的一种可以快速实现序列化的类
需要先创建一个py文件 用来写继承序列化类
from rest_framework import serializers
class BookSerializer(serializers.Serializer)
name = serializers.CharField(max_length=32)
price = serializers.CharField(max_length=32)
publish = serializers.CharField(max_length=32)
def create(self, validated_data):
res = Book.objects.create(**validated_data)
return res
def update(self, instance, validated_data):
instance.name = validated_data.get('name')
instance.price = validated_data.get('price')
instance.publish = validated_data.get('publish')
instance.save()
return instance
序列化
# 获取单个和多个的get方法
序列化多条数据
class BookView(APIView):
def get(self, request):
book_list = Book.objects.all()
ser = BookSerializer(instance=book_list, many=True)
# instance是需要序列化的对象 many表示可以序列化多条数据
return Response(ser.data)
序列化单条数据
class BookView(APIView):
def get(self, request, pk):
book_list = Book.objects.filter(pk=pk).first()
ser = BookSerializer(instance=book_list)
return Response(ser.data)
反序列化
# 新增数据post 修改数据 put
反序列化的新增
class BookView(APIView):
def post(self, request):
ser = BookSerializer(data=request.data)
if ser.is_valid():
ser.save()
return Response(ser.data)
else:
return Response(ser.errors)
# 反序列化的修改
class BookView(APIView):
def put(self, request, pk):
book = Book.objects.filter(pk=pk).first()
ser = BookSerializer(instance=book, data=request.data)
if ser.is_valid():
ser.save()
return Response(ser.data)
else:
return Response(ser.errors)
# 删除数据 delete
class BookView(APIView):
def delete(self,request,pk):
Book.objects.filter(pk=pk).delete()
return Response()
总结
前后端分离项目:需要我们自己去做数据校验,手动去转数据格式,因为跨平台数据传输都用json字符串,不能直接jsonqueryset对象
1.序列化:把python中的对象转换成json格式字符串,序列化器会把模型对象转换成字典,经过response以后变成json字符串
2.反序列化:把json格式字符串转换成python中的对象,把客户端发送过来的数据经过request以后变成字典
序列化器:1.定义一个类继承Serializer
2.在类内写字段,字段参数
3.在视图类中,实例化得到一个序列化类的对象,传入要序列化的数据
4.返回的时候用Response序列化类的对象.data直接获取数据