系列文章目录
drf
第一章 django web开发模式、api接口、api接口测试工具、restful规范、序列化反序列化、drf安装使用
第二章 drf的使用、APIView源码分析、Request源码分析、Serializer的序列化
第三章 Serializer的反序列化、字段与参数、局部与全局钩子、ModelSerializer使用
一、Serializer的反序列化
使用serializer序列化器时,反序列化一般针对update和create,所以如果有对应表主键时最好为其设置read_only为True
表中无外键关系时可以使用serializer或者ModelSerializer
此处展示Serializer使用方式
表关系:
class Book(models.Model):
bname = models.CharField(max_length=20, verbose_name='书籍名称')
price = models.DecimalField(max_digits=5, decimal_places=2, verbose_name='书籍单价')
def __str__(self):
return self.bname
对应的Serializer序列化器
针对于Serializer创建与更新方法需要重写,删除、查询、查询单个需要在视图类中完成
class BookSerializer(serializers.Serializer):
bname = serializers.CharField(max_length=20)
price = serializers.DecimalField(max_digits=5, decimal_places=2)
def update(self, instance, validated_data):
instance.bname = validated_data.get('bname')
instance.price = validated_data.get('price')
instance.save()
return instance
def create(self, validated_data):
book_obj = Book.objects.create(**validated_data)
return book_obj
对应视图类
class BookApiView(views.APIView):
def get(self,request):
dict = {
{
'code':200, 'msg':'查询成功成功'}}
if not request.query_params:
books = Book.objects.all()
dict['msg'] = '查询全部书籍成功'
else :
books = Book.objects.filter(pk=request.query_params.get('id'))
dict['msg'] = '查询一本书籍成功'
bookSerializer = BookSerializer(instance=books, many=True)
dict['data'] = bookSerializer.data
return Response(dict)
def delete(self,request):
dict = {
'code':200}
pk = request.data.get('id')
if pk:
book_obj = Book.objects.filter(pk=pk)
if book_obj