https://www.django-rest-framework.org/ 官方站
https://www.django-rest-framework.org/tutorial/quickstart/#serializers -- 序列化
一个 例子
from django.conf.urls import urlfrom django.contrib import adminfrom app01 import viewsurlpatterns = [ url(r'^admin/', admin.site.urls), url(r'books/(\d+)/', views.BookHandle.as_view()), url(r'books/', views.BookHandle.as_view()),]
class BookHandle(APIView): # 获取所有书籍 def get(self, request,id=None): if id: books_obj_list = models.Book.objects.filter(id=id) else: books_obj_list = models.Book.objects.all() book_se = BookSerializer(books_obj_list, many=True) # 要点 return Response(book_se.data)
查询全部和带参数的查询 --
from django.shortcuts import renderfrom app01 import modelsfrom rest_framework.views import APIViewfrom rest_framework import serializersfrom rest_framework.response import Response # 响应class BookSerializer(serializers.ModelSerializer): class Meta: model = models.Book fields = '__all__' # exclude = ('user',) 排除某些字段的方法 fields=['','']列表 class BookHandle(APIView): # 获取所有书籍 def get(self, request,id=None): if id: books_obj_list = models.Book.objects.filter(nid=id) else: books_obj_list = models.Book.objects.all() book_se = BookSerializer(books_obj_list, many=True) # 要点 return Response(book_se.data) def post(self, request): cs = BookSerializer(data=request.data,many=False) if cs.is_valid(): cs.save() # create 新建 return Response(cs.data) else: return Response(cs.errors)class SBookHandle(APIView): # 更新数据 def put(self,request,id): old_obj = models.Book.objects.filter(pk=id).first() # querySet cs = BookSerializer(data=request.data,many=False,instance=old_obj) if cs.is_valid(): cs.save() # 更新 update return Response(cs.data) else: return Response(cs.errors) def delete(self,request,id): models.Book.objects.filter(pk=id).delete() # 删除 return Response('') def get(self,request,id): books_obj_list = models.Book.objects.get(pk=id) # model 类型 book_se = BookSerializer(books_obj_list,many=False) return Response(book_se.data)
from django.conf.urls import urlfrom django.contrib import adminfrom app01 import viewsurlpatterns = [ url(r'^admin/', admin.site.urls), url(r'books/$', views.BookHandle.as_view()), # 不带参数的 url(r'books/(\d+)/', views.SBookHandle.as_view()), # 带参数的]
-- views.py --# 进阶版from rest_framework.mixins import CreateModelMixin,UpdateModelMixin,DestroyModelMixin,ListModelMixin,RetrieveModelMixinfrom rest_framework import genericsclass PublishHandle(ListModelMixin,CreateModelMixin,generics.GenericAPIView): queryset = models.Publish.objects.all() serializer_class = PublishSerializer def get(self, request): return self.list(request) def post(self, request): return self.create(request)class SPublishHandle(UpdateModelMixin,DestroyModelMixin,RetrieveModelMixin, generics.GenericAPIView): queryset = models.Publish.objects.all() serializer_class = PublishSerializer def put(self, request,*args,**kwargs): return self.update(request,*args,**kwargs) # update def delete(self, request,*args,**kwargs): return self.destroy(request,*args,**kwargs) # destroy def get(self, request,*args,**kwargs): return self.retrieve(request,*args,**kwargs) # retrieve# 极简版# class AuthorHandle(generics.ListCreateAPIView): # 查询创建二合一# queryset = models.Author.objects.all()# serializer_class = AuthorSerializer# ## class SAuthorHandle(generics.RetrieveUpdateDestroyAPIView): # 查单 更新 删除 三合一# queryset = models.Author.objects.all()# serializer_class = AuthorSerializer#终极版from rest_framework.viewsets import ModelViewSetclass SAuthorHandle(ModelViewSet): # 全合一 queryset = models.Author.objects.all() serializer_class = AuthorSerializer-- all_serializer.py --from app01 import modelsfrom rest_framework import serializersfrom rest_framework.response import Response # 响应from rest_framework.views import APIViewclass BookSerializer(serializers.ModelSerializer): # create update class Meta: model = models.Book fields = '__all__'class PublishSerializer(serializers.ModelSerializer): class Meta: model = models.Publish fields = '__all__'class AuthorSerializer(serializers.ModelSerializer): class Meta: model = models.Author fields = '__all__'-- urls.py --from django.conf.urls import urlfrom django.contrib import adminfrom app01 import viewsurlpatterns = [ url(r'^admin/', admin.site.urls), url(r'books/$', views.BookHandle.as_view()), # 不带参数的 url(r'books/(\d+)/', views.SBookHandle.as_view()), # 带参数的 url(r'publishs/$', views.PublishHandle.as_view()), # 不带参数的 url(r'publishs/(?P\d+)/', views.SPublishHandle.as_view()), # 不带参数的 url(r'authors/$', views.SAuthorHandle.as_view({ 'get':'list','post':'create'})), # 不带参数的 url(r'authors/(?P \d+)/', views.SAuthorHandle.as_view({ 'get':'retrieve','put':'update','delete':'destroy'})), # 不带参数的]