as 不显示gradle视图_Python构建RESTful网络服务[Django篇:基于类视图的API]
系列文章介绍
本系列文章将详细介绍将Django官方引导教程中的投票项目改写为RESTful网络服务。Django官方教程地址https://docs.djangoproject.com/zh-hans/2.1/intro/tutorial01/
前置步骤
前置步骤请查看文末列出的文章列表中的前置文章。
- Step-1:RESTful与Django
- Step-2:创建项目和应用
- Step-3:使用原生Django编写API
- Step-4:序列化与反序列化
Step-5:基于DRF的视图类的视图
使用APIView
我们将使用DRF中的APIView来重写之前编写的两个视图。我们了解过Django中的基于类的视图,APIView封装和继承了Django原生的视图类,并额外提供了部分功能。 新建一个polls/apiview.py,编写代码如下:
# in polls/apiview.py
from rest_framework.views import APIView
from rest_framework.response import Response
from django.shortcuts import get_object_or_404from .models import Poll, Choice
from .serializers import PollSerializerclass PollList(APIView):def get(self, request):polls = Poll.objects.all()[:20] # 从Poll模型对应的表中取出所有记录,并切片前20条记录。这是一个QuerySet类的实例,其中包含了如何取数的信息。serialized = PollSerializer(polls, many=True) # 利用QuerySet实例化一个序列化器。many=True表示,这是对多条记录的请求。return Response(serialized.data) # serialized.data是一个有序字典对象class PollDetail(APIView):def get(self, request, pk):poll = get_object_or_404(Poll, pk=pk) # get_object_or_404要么取回记录实例要么返回404 Not Found状态serialized = PollSerializer(poll) # 序列化这个记录实例return Response(data=serialized.data)我们再把url指向对应的新的视图。
# in polls/ur.py
from django.urls import path
# from .views import polls_list, polls_detail
from .apiview import PollList, PollDetailurlpatterns = [path("polls/", PollList.as_view(), name="polls_list"), # .as_view()访求返回的是一个函数。以.as_view()作为入口,这个序列化器实例会进行请求方法分发、执行视图函数(方法)等操作。path("polls/<int:pk>/", PollDetail.as_view(), name="polls_detail"),
]使用DRF通用视图简化代码
检查之前写的视图,确认它是可以正常工作的,但是代码有点冗余和麻烦。DRF为我们提供了通用视图,它预封装了许多有用的功能。
# in polls/apiview.py
from rest_framework import genericsfrom .models import Poll, Choice
from .serializers import PollSerializer, ChoiceSerializer, VoteSerializerclass PollList(generics.ListCreateAPIView):queryset = Poll.objects.all()serializer_class = PollSerializerclass PollDetail(generics.RetrieveUpdateDestroyAPIView):queryset = Poll.objects.all()serializer_class = PollSerializer对数据库的操作,一般称为CRUD或CRUDL,即Create(增加记录),Retrieve或Read(查询单条记录),Update(修改记录),Destroy或Delete(删除记录)。在本节之前,我们编写的视图中已经支持了List操作和Retrieve操作,还不能支持其他操作。 我们从generics.ListCreateAPIView类的名字上可以看出,它支持List、Create两种视图功能。其中List对应的HTTP动词是GET,Create对应的HTTP动态是POST。 从generics.RetrieveUpdateDestroyAPIView的名字可以看出,它支持Retrieve、Update、Destroy,它可以取回单条记录,修改单条记录,,删除单条记录。Retrieve、Update、Destroy对应的HTTP动词分别是GET、PUT、DELETE。 这些通用视图类是如何支持多种操作的呢?这涉及到多继承(也称新式类,也称混合类、混合继承等)。在此不多述,在以后的文章中,希望能对通用视图类展开来说。 现在我们打开http://127.0.0.1:8000/api-polls/polls/,可以发现,原来的数据仍能取回,而网页下方,出现了一个可以提交POST请求的表单。
说明我们的视图是支持POST的视图了。
编写其它视图
# in polls/apiview.py
from rest_framework import genericsfrom .models import Poll, Choice
from .serializers import PollSerializer, ChoiceSerializer, VoteSerializerclass PollList(generics.ListCreateAPIView):queryset = Poll.objects.all()serializer_class = PollSerializerclass PollDetail(generics.RetrieveUpdateDestroyAPIView):queryset = Poll.objects.all()serializer_class = PollSerializerclass ChoiceList(generics.ListCreateAPIView):queryset = Choice.objects.all()serializer_class = ChoiceSerializerclass CreateVote(generics.CreateAPIView):# Vote只须要被创建serializer_class = VoteSerializer编写polls/urls.py进行url分发。
# in polls/urls.py
from django.urls import path
# from .views import polls_list, polls_detail
from .apiview import PollList, PollDetail, ChoiceList, CreateVoteurlpatterns = [path("polls/", PollList.as_view(), name="polls_list"),path("polls/<int:pk>/", PollDetail.as_view(), name="polls_detail"),path('choices/', ChoiceList.as_view(), name='choice_list'),path('vote/', CreateVote.as_view(), name='create_view')
]尝试POST请求
尝试用POST新建一个问题。
用POST为这个问题添加选项。
细心的话可以发现,POST成功后,立马返回了POST成功的数据。
项目代码
目前为止的项目代码可见于https://github.com/Runython/restify_django_tutorial/tree/b3
Step-last:后记
系列文章风格
系列文章会以低零基础、手把手、逐行解释、连续完整、资源指向的风格进行写作。
低零基础:降低文章阅读门槛,使接触Python Web开发时间较短的读者也能有所收获。
手把手:一些基础操作,也会说明。如本文中,包括安装库等操作也会进行说明。
逐行解释:对代码进行解释,以白居易写诗风格为目标(传说白居易会把自己的诗解释给街头妇人,直到连不懂文化的妇人也能明白,完成创作)。
连续完整:连续是指,文章是成系列的,上文下文之间是有着联系的,项目是连续的。代码托管也体现了这一点,不同的文章,对应不同的git标签或分支,也体现了不同的进度。完整是指,项目是完整的,文章也是完整的。文章可以当作博文来读,也可以当作教程来读。
文章列表
Vue+Django构建前后端分离项目(选读):
润润万睡:Django+Vue.js构建项目zhuanlan.zhihu.comPython构建RESTful网络服务[Django篇:基于函数视图的API]:
润润万睡:Python构建RESTful网络服务[Django篇:基于函数视图的API]zhuanlan.zhihu.comPython构建RESTful网络服务[Django篇:使用PostgreSQL替代SQLite](选读):
润润万睡:Python构建RESTful网络服务[Django篇:使用PostgreSQL替代SQLite]zhuanlan.zhihu.comPython构建RESTful网络服务[Django篇:基于类视图的API]
润润万睡:zhuanlan.zhihu.com参考文献
Hillar G C. Building RESTful Python Web Services[J]. Birmingham, UK: Packt Publishing Ltd, 2016.
总结
以上是生活随笔为你收集整理的as 不显示gradle视图_Python构建RESTful网络服务[Django篇:基于类视图的API]的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 面馆加盟多少钱啊?
- 下一篇: doc python 颜色_Python