标签:数据 str http ror views span def 抽取 model
路由:
url(r‘^publish/$‘, views.PublishView.as_view()), url(r‘^publish/(?P<pk>\d+)/$‘, views.PublishDetailView.as_view()),
视图:
class PublishSerializers(serializers.ModelSerializer): class Meta: model=models.Publish fields=‘__all__‘ class PublishView(APIView): #查询所有出版社 def get(self, request): publish_list = models.Publish.objects.all() res = PublishSerializers(publish_list, many=True) # 序列化数据 return Response(res.data) #增加出版社 def post(self, request): # 添加一条数据 print(request.data) res=PublishSerializers(data=request.data) if res.is_valid(): res.save() # 生成记录 return Response(res.data) else: return Response(res.errors) class PublishDetailView(APIView): #查询单个出版社 def get(self,request,pk): publish_obj=models.Publish.objects.filter(pk=pk).first() res=PublishSerializers(publish_obj,many=False) return Response(res.data) #修改出版社 def put(self,request,pk): publish_obj = models.Publish.objects.filter(pk=pk).first() res=PublishSerializers(data=request.data,instance=publish_obj) if res.is_valid(): res.save() # update return Response(res.data) else: return Response(res.errors) #删除出版社 def delete(self,request,pk): models.Publish.objects.filter(pk=pk).delete() return Response("")
对应源码配置参数: queryset=models.Publish.objects.all() #指定queryset对象 和对应的serializer类 serializer_class=PublishSerializers
url(r‘^publish/$‘, views.PublishView.as_view()), url(r‘^publish/(?P<pk>\d+)/$‘, views.PublishDetailView.as_view()),
视图:
from rest_framework.mixins import CreateModelMixin,RetrieveModelMixin,ListModelMixin,UpdateModelMixin,DestroyModelMixin from rest_framework.generics import GenericAPIView class PublishView(ListModelMixin,CreateModelMixin,GenericAPIView): queryset=models.Publish.objects.all() serializer_class=PublishSerializers def get(self, request): #对应ListModelMixin类 return self.list(request) def post(self, request): #对应CreateModelMixin类 return self.create(request) class PublishDetailView(RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin,GenericAPIView): queryset=models.Publish.objects.all() serializer_class=PublishSerializers def get(self,request,*args,**kwargs): #对应RetrieveModelMixin类 return self.retrieve(request,*args,**kwargs) def put(self,request,*args,**kwargs): #对应UpdateModelMixin类 return self.update(request,*args,**kwargs) def delete(self,request,*args,**kwargs): #对应DestroyModelMixin类 return self.destroy(request,*args,**kwargs)
路由:路由中有名分组的名字必须指定为pk
url(r‘^publish/$‘, views.PublishView.as_view()), url(r‘^publish/(?P<pk>\d+)/$‘, views.PublishDetailView.as_view()),
视图:
from rest_framework.generics import ListCreateAPIView,RetrieveUpdateDestroyAPIView class PublishView(ListCreateAPIView): #ListCreateAPIView类里包含get和post接口 queryset=models.Publish.objects.all() serializer_class=PublishSerializers class PublishDetailView(RetrieveUpdateDestroyAPIView): #RetrieveUpdateDestroyAPIView类里包含get、put、delete接口 queryset=models.Publish.objects.all() serializer_class=PublishSerializers
路由:路由中有名分组的名字必须指定为pk
url(r‘^publish/$‘, views.PublishView.as_view({‘get‘:‘list‘,‘post‘:‘create‘})), url(r‘^publish/(?P<pk>\d+)/$‘,views.PublishView.as_view({‘get‘:‘retrieve‘,‘put‘:‘update‘,‘delete‘:‘destroy‘})),
视图:
from rest_framework.viewsets import ModelViewSet class PublishView(ModelViewSet): #ModelViewSet类里囊括了get、post、get、put、delete这五个接口 queryset=models.Publish.objects.all() serializer_class=PublishSerializers
ModelViewSet类继承了ViewSetMixin类,所以可以通过路由响应到不同的函数
ViewSetMixin源码分析:
重写as_view()方法,可以给as_view()传参
标签:数据 str http ror views span def 抽取 model
原文地址:https://www.cnblogs.com/yeyangsen/p/10131633.html