總結:
?? ???? 1 reuqest類----源碼
?? ??? ?
?? ??? ?2 restframework 下的APIView--源碼
?? ??? ?
?? ??? ?? url(r'^books/$', views.BookView.as_view(),name="books")#? View下的view
?? ??? ?? books/一旦被訪問: view(request) ------APIView: dispatch()
?? ??? ?
?? ??? ?3 def dispatch():
?? ??? ?
?? ??? ??? ?? 構建request對象
?? ??? ??? ?? self.request=Request(request)
?? ??? ??? ?? self.request._request
?? ??? ??? ?? self.request.GET? # get
?? ??? ??? ?? self.request.data # POST? PUT
?? ??? ? ?
?? ??? ??? ?? 分發----if get請求:
?? ??? ??? ??? ??? ?if request.method.lower() in self.http_method_names:
?? ??? ??? ??? ??? ??? ?handler = getattr(self, request.method.lower(),
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ? self.http_method_not_allowed)
?? ??? ??? ??? ??? ?else:
?? ??? ??? ??? ??? ??? ?handler = self.http_method_not_allowed? ?
?? ??? ??? ??? ??? ?response = handler(request, *args, **kwargs) # self.get(request, *args, **kwargs)
?? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ?return response?? ??? ??? ??? ?
?? ??? ??? ?
?? ??? ?4 序列化類
?? ??? ???? # from django.core import serializers
??????????? # ret=serializers.serialize("json",publish_list)
?? ??? ?
?? ??? ???? restframework下的序列類? BookModelSerializers
?? ??? ??? ???? 將queryset或者model對象序列成一json數據
?? ??? ??? ??? ??? ?bs=BookModelSerializers(book_list,many=True,context={'request': request})
?? ??? ??? ??? ??? ?bs=BookModelSerializers(book,context={'request': request})
?? ??? ?? ?
?? ??? ???????? 還可以做校驗數據,json-------》queryset/model-->記錄
?? ??? ??? ??? ?
?? ??? ??? ??? ??? ?bs=BookModelSerializers(data=request.data)
?? ??? ??? ??? ??? ?if bs.is_valid():
?? ??? ??? ??? ??? ??? ?print(bs.validated_data)
?? ??? ??? ??? ??? ??? ?bs.save() # 重寫create方法
?? ??? ?5 操作數據:
?? ??? ?
?? ??? ???? 以Book表為例
?? ??? ??? ???? class BookView(APIView):
?? ??? ??? ??? ???? # 查看所有書籍
?? ??? ??? ??? ??? ?def get(self,request):
?? ??? ??? ??? ??? ??? ?book_list=Book.objects.all()
?? ??? ??? ??? ??? ??? ?bs=BookModelSerializers(book_list,many=True,context={'request': request})
?? ??? ??? ??? ??? ??? ?return Response(bs.data)
?? ??? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ?# 添加一本書籍?? ?
?? ??? ??? ??? ??? ?def post(self,request):
?? ??? ??? ??? ??? ??? ?# post請求的數據
?? ??? ??? ??? ??? ??? ?bs=BookModelSerializers(data=request.data)
?? ??? ??? ??? ??? ??? ?if bs.is_valid():
?? ??? ??? ??? ??? ??? ??? ?print(bs.validated_data)
?? ??? ??? ??? ??? ??? ??? ?bs.save()# create方法
?? ??? ??? ??? ??? ??? ??? ?return Response(bs.data)
?? ??? ??? ??? ??? ??? ?else:
?? ??? ??? ??? ??? ??? ??? ?return Response(bs.errors)
?? ??? ??? ??? ?class BookDetailView(APIView):
??????????????????? # 查看一本書籍
?? ??? ??? ??? ??? ?def get(self,request,id):
?? ??? ??? ??? ??? ??? ?book=Book.objects.filter(pk=id).first()
?? ??? ??? ??? ??? ??? ?bs=BookModelSerializers(book,context={'request': request})
?? ??? ??? ??? ??? ??? ?return Response(bs.data)
??????????????????? # 更新一本書籍
?? ??? ??? ??? ??? ?def put(self,request,id):
?? ??? ??? ??? ??? ??? ?book=Book.objects.filter(pk=id).first()
?? ??? ??? ??? ??? ??? ?bs=BookModelSerializers(book,data=request.data)
?? ??? ??? ??? ??? ??? ?if bs.is_valid():
?? ??? ??? ??? ??? ??? ??? ?bs.save()
?? ??? ??? ??? ??? ??? ??? ?return Response(bs.data)
?? ??? ??? ??? ??? ??? ?else:
?? ??? ??? ??? ??? ??? ??? ?return Response(bs.errors)
??????????????????? # 刪除某一本書籍
?? ??? ??? ??? ??? ?def delete(self,request,id):
?? ??? ??? ??? ??? ??? ?Book.objects.filter(pk=id).delete()
?? ??? ??? ??? ??? ??? ?return Response()