义乌做网站哪家好,怎么在自己的网站上推广业务,电商有多少种方法推广,发稿平台GenericAPIView
1.视图层类使用GenericAPIView继承#xff0c;能简化类里的方法code。
2.简化后的方法code格式基本通用#xff0c;简单修改即可应用到其他类。
一、class开始加入 queryset Book.objectsserializer_class BookModelSerializer
二、方法里获取对象
a.查…GenericAPIView
1.视图层类使用GenericAPIView继承能简化类里的方法code。
2.简化后的方法code格式基本通用简单修改即可应用到其他类。
一、class开始加入 queryset Book.objectsserializer_class BookModelSerializer
二、方法里获取对象
a.查询一个使用如需要pk值查询
book self.get_object()
b.查询多个如获取所有对象 book self.get_queryset()
c.序列化方法使用self.get_serializer()
括号内原来是什么参数就写什么参数如
instancebook, datarequest.data
manyTrue 三、代码views.py
from app01.models import Book
from app01.ser import BookSerializer,BookModelSerializer
from rest_framework.response import Response
from rest_framework.generics import GenericAPIView
# 自己学的response
from app01.utils import MyResponse# 基于GenericAPIView
class BookView(GenericAPIView):queryset Book.objectsserializer_class BookModelSerializerdef get(self, request, pk):book self.get_object()book_ser self.get_serializer(book)return Response(book_ser.data)def put(self, request, pk):response MyResponse()book self.get_object()book_ser self.get_serializer(instancebook, datarequest.data)# 要数据验证if book_ser.is_valid(): # 返回True 表示验证通过book_ser.save()response.data book_ser.dataelse:response.status 101response.msg 数据校验失败response.data book_ser.errorsreturn Response(response.get_dic)def delete(self, request, pk):ret Book.objects.filter(pkpk).delete()return Response({status: 100, msg: 删除成功})class BooksView(GenericAPIView):queryset Book.objectsserializer_class BookModelSerializer# 使用封装responsedef get(self, request):responseMyResponse()book self.get_queryset()book_ser self.get_serializer(book, manyTrue) # 序列化多条。 如果一条不需要写response.data book_ser.datareturn Response(response.get_dic)# 新增def post(self, request):responseMyResponse()# 新增没有instance只有databook_ser self.get_serializer(datarequest.data)# 如果没有data会报错。第一个参数是instance# book_ser BookSerializer(request.data)# 校验字段if book_ser.is_valid():book_ser.save()response.data book_ser.dataelse:response.status 102response.msg 新增数据校验失败response.data book_ser.datareturn Response(response.get_dic)
5个视图扩展类
分别如下
ListModelMixin,CreateModelMixin,UpdateModelMixin,DestroyModelMixin,RetrieveModelMixin
from app01.models import Book
from rest_framework.mixins import ListModelMixin,CreateModelMixin,UpdateModelMixin,DestroyModelMixin,RetrieveModelMixin# 5个扩展类
class Books3View(GenericAPIView,ListModelMixin,CreateModelMixin):queryset Book.objectsserializer_class BookModelSerializerdef get(self,request):return self.list(request)def post(self,request):return self.create(request)class Book3DetailView(GenericAPIView,RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin):queryset Book.objectsserializer_class BookModelSerializerdef get(self,request,pk):return self.retrieve(request,pk)def put(self,request,pk):return self.update(request,pk)def delete(self,request,pk):return self.destroy(request,pk) GenericAPIView的视图子类 9个
createupdate等对应方法可以单独继承也有组合的类继承所以有9个。
# 基于 GenericAPIView的视图子类9个
from rest_framework.generics import CreateAPIView,ListAPIView,UpdateAPIView,RetrieveAPIView,DestroyAPIView,ListCreateAPIView,RetrieveUpdateAPIView,RetrieveDestroyAPIView,RetrieveUpdateDestroyAPIView# class Books4View(ListAPIView,CreateAPIView):
class Books4View(ListCreateAPIView):queryset Book.objectsserializer_class BookModelSerializer# class Book4DetailView(UpdateAPIView,RetrieveAPIView,DestroyAPIView):
class Book4DetailView(RetrieveUpdateDestroyAPIView):queryset Book.objectsserializer_class BookModelSerializer ModelViewSet
简写成一个class路由需要特别写法。
urls.py path(books5/, views.Books5View.as_view(actions{get:list,post:create})),re_path(^books5/(?Ppk\d), views.Books5View.as_view(actions{get:retrieve,put:update,delete:destroy})),
views.py
# 使用ModelViewSet编写5个接口
from rest_framework.viewsets import ModelViewSet
class Books5View(ModelViewSet):queryset Book.objectsserializer_class BookModelSerializer 使用ViewSetMixin 自定义方法名字
path(books6/, views.Books6View.as_view(actions{get: get_all_book})), # 使用ViewSetMixin 自定义方法名字
from rest_framework.viewsets import ViewSetMixin# ViewSetMixin一定放在前面重写as_view方法
class Books6View(ViewSetMixin,GenericAPIView):def get_all_book(self,request):books Book.objects.all()book_ser BookSerializer(books, manyTrue)return Response(book_ser.data)