Restful_framework视图组件代码实例解析
一、基本视图
写一个出版社的增删查改resful接口
要自己事先创建好django项目,并创建好表,添加完记录
路由:
url(r'^publish/$',views.PublishView.as_view()),
url(r'^publish/(?P\d+)/$',views.PublishDetailView.as_view()),
视图:
fromapiimportmodelsfromrest_frameworkimportserializersfromrest_framework.responseimportResponsefromrest_framework.viewsimportAPIView classPublishSerializers(serializers.ModelSerializer): classMeta: model=models.Publish fields='__all__' classPublishView(APIView): #查询出版社表中所有记录 defget(self,request): publish_list=models.Publish.objects.all() bs=PublishSerializers(publish_list,many=True) #序列化数据 returnResponse(bs.data)#返回的结果是列表中套字典 defpost(self,request): #添加一条数据 print(request.data) bs=PublishSerializers(data=request.data) ifbs.is_valid(): bs.save()#生成记录 returnResponse(bs.data)#返回的是添加成功记录的字典 else: returnResponse(bs.errors) classPublishDetailView(APIView):#查询某一条数据 defget(self,request,pk): publish_obj=models.Publish.objects.filter(pk=pk).first() bs=PublishSerializers(publish_obj,many=False) returnResponse(bs.data)#更新某一条数据 defput(self,request,pk): publish_obj=models.Publish.objects.filter(pk=pk).first() bs=PublishSerializers(data=request.data,instance=publish_obj) ifbs.is_valid(): bs.save()#update returnResponse(bs.data) else: returnResponse(bs.errors)#删除某一条数据 defdelete(self,request,pk): models.Publish.objects.filter(pk=pk).delete() returnResponse("")
二、mixins类和generic类编写视图
路由:
url(r'^publishes$',views.Publish.as_view()),
url(r'^publish/(?P\d+)',views.PublishDetail.as_view()),
视图:
fromapiimportmodels fromrest_frameworkimportserializers fromrest_frameworkimportmixins fromrest_framework.genericsimportGenericAPIView classPublishSer(serializers.ModelSerializer): classMeta: model=models.Publish fields='__all__' classPublish(GenericAPIView,mixins.ListModelMixin,mixins.CreateModelMixin): queryset=models.Publish.objects.all() serializer_class=PublishSer defget(self,request): returnself.list(request)#在ListModelMixin下有一个list方法,返回的就是查询的结果:Response(serializer.data) defpost(self,request): returnself.create(request)#已经封装好了,帮我们做校验和序列化,返回的是添加成功的记录 classPublishDetail(GenericAPIView,mixins.DestroyModelMixin,mixins.RetrieveModelMixin,mixins.UpdateModelMixin): queryset=models.Publish.objects.all() serializer_class=PublishSer defget(self,request,*args,**kwargs): returnself.retrieve(request,*args,**kwargs) defput(self,request,*args,**kwargs): returnself.update(request,*args,**kwargs) defdelete(self,request,*args,**kwargs): returnself.destroy(request,*args,**kwargs)
三、使用generic下ListCreateAPIView和RetrieveUpdateDestroyAPIView
路由:
url(r'^publishes$',views.Publish.as_view()),
url(r'^publish/(?P\d+)',views.PublishDetail.as_view()),
视图:
fromapiimportmodels fromrest_frameworkimportmixins fromrest_framework.genericsimportGenericAPIView fromrest_framework.genericsimportListCreateAPIView,RetrieveUpdateDestroyAPIView fromrest_frameworkimportserializers classPublishser(serializers.ModelSerializer): classMeta: model=models.Publish fields='__all__' classPublish(ListCreateAPIView): queryset=models.Publish.objects.all() serializer_class=Publishser classPublishDetail(RetrieveUpdateDestroyAPIView): queryset=models.Publish.objects.all() serializer_class=Publishser
四、使用ModelViewSet
路由:
url(r'^publish$',views.Publish.as_view({'get':'list','post':'create'})),
url(r'^publish/(?P\d+)',views.Publish.as_view({'get':'retrieve','put':'update','delete':'destroy'})),
视图:
fromrest_framework.viewsetsimportModelViewSet fromapiimportmodels fromrest_frameworkimportserializers classPublishser(serializers.ModelSerializer): classMeta: model=models.Publish fields='__all__' classPublish(ModelViewSet): queryset=models.Publish.objects.all() serializer_class=Publishser
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。