模型类序列化器的使用
新建一个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':'删除成功'})
这么写就轻松多了,下面还有更加简单的写法,但是把难的写一遍,印象就更深刻
class BooksGeneriAll(GenericAPIView):
# 傻逼了,,在函数内部就是自己定义的了,,,
queryset = Book.objects
serializer_class = myserializersmod.BookModelSerializer
def get(self, request, *args, **kwargs):
response_msg = {'status': 100, 'msg': '成功'}
book = self.get_queryset()
book_ser = self.get_serializer(instance=book, many=True)
#在data中点all了
response_msg['data'] = book_ser.data
return Response(response_msg)
def post(self, request, *args, **kwargs):
response_msg = {'status': 100, 'msg': '成功'}
book_ser = self.get_serializer(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)
# 模块GenericAPIView的方式
# 查询单个
class BooksGeneri(GenericAPIView):
queryset = Book.objects
serializer_class = myserializersmod.BookModelSerializer
def get_serializer_class(self):
return myserializersmod.BookModelSerializer
def get(self, request,*args, **kwargs):
pk = kwargs.get('pk')
book = self.get_object()
book_ser = self.get_serializer(instance=book)
return Response(book_ser.data)
# 修改
def put(self, request, *args, **kwargs):
response_msg = {'status': 100, 'msg': '成功'}
# 找到这个对象
pk = kwargs.get('pk')
book = self.get_object()
# 得到一个序列化类的对象
# boo_ser=BookSerializer(book,request.data)
boo_ser = self.get_serializer(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': '删除成功'})
#继承了mixins.ListModelMixin,GenericAPIView
#ListModelMixin 实现多个查询的类
#GenericAPIView 实现通用写法需要的类
class BoosListView(ListAPIView):
queryset = Book.objects
serializer_class = myserializersmod.BookModelSerializer
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
#继承了mixins.ListModelMixin,GenericAPIView
#RetrieveModelMixin 实现单个查询的类
#GenericAPIView 实现通用写法需要的类
class BookRetrieveView(RetrieveAPIView):
queryset = Book.objects
serializer_class = myserializersmod.BookModelSerializer
def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs)
from app01.myUserRateThrottle import MyThrottles, MyUserThrottle
#全部继承了,配置好后所以的查询都可以走这里
class BookModelViewSet(ModelViewSet):
# authentication_classes = [MyAuthentication]
permission_classes = []
# throttle_classes = [MyUserThrottle]
queryset = Book.objects
serializer_class = myserializersmod.BookModelSerializer
浙公网安备 33010602011771号