模型类序列化器的使用
新建一个py文件,代码如下
from rest_framework import serializers from app01.models import Book class BookModelSerializer(serializers.ModelSerializer): class Meta: model = Book # 对应上models.py中的模型 fields = '__all__' # fields=('name','price','id','author') # 只序列化指定的字段 # exclude=('name',) #跟fields不能都写,写谁,就表示排除谁 # read_only_fields=('price',) # write_only_fields=('id',) #弃用了,使用extra_kwargs extra_kwargs = { # 类似于这种形式name=serializers.CharField(max_length=16,min_length=4) 'price': {'write_only': True}, } # 其他使用一模一样 # 不需要重写create和updata方法了
view中的代码
class BooksModAll(APIView): def get(self,*args,**kwargs): response_msg = {'status': 100, 'msg': '成功'} book = Book.objects.all() book_ser = myserializersmod.BookModelSerializer(instance=book,many=True) response_msg['data'] = book_ser.data return Response(response_msg) def post(self,request,*args,**kwargs): response_msg = {'status': 100, 'msg': '成功'} book_ser = myserializersmod.BookModelSerializer(data=request.data) if not book_ser.is_valid(): response_msg['status'] = 101 response_msg['msg'] = '增加数据失败' response_msg['err'] = book_ser.errors return Response(response_msg) book_ser.save() response_msg['date'] = book_ser.data return Response(response_msg) class BooksMod(APIView): def get(self,*args,**kwargs): pk = kwargs.get('pk') book = Book.objects.filter(id=pk).first() book_ser = myserializersmod.BookModelSerializer(instance=book) return Response(book_ser.data) #修改 def put(self,request,*args,**kwargs): response_msg = {'status': 100, 'msg': '成功'} # 找到这个对象 pk = kwargs.get('pk') book = Book.objects.filter(id=pk).first() # 得到一个序列化类的对象 # boo_ser=BookSerializer(book,request.data) boo_ser = myserializersmod.BookModelSerializer(instance=book, data=request.data) # 要数据验证(回想form表单的验证) if boo_ser.is_valid(): # 返回True表示验证通过 boo_ser.save() # 报错 response_msg['data'] = boo_ser.data else: response_msg['status'] = 101 response_msg['msg'] = '数据校验失败' response_msg['data'] = boo_ser.errors return Response(response_msg) def delete(self,*args,**kwargs): pk = kwargs.get('pk') ret=Book.objects.filter(pk=pk).delete() return Response({'status':100,'msg':'删除成功'})
这么写就轻松多了,下面还有更加简单的写法,但是把难的写一遍,印象就更深刻