摘要:官網(wǎng)地址個(gè)人學(xué)習(xí)筆記四我們也能夠使用來編寫我們的,而不是基于正如我們所看到的,這是一個(gè)強(qiáng)大的模式,它使我們的功能能夠復(fù)用,并保持我們的代碼整潔。檢索,更新或者刪除一個(gè)實(shí)例。接下來將展示使用來組成我們的。
(官網(wǎng)地址)[django rest framework個(gè)人學(xué)習(xí)筆記(四)————Tutorial]
Class-based views我們也能夠使用class-based view 來編寫我們的API views,而不是基于function based views.正如我們所看到的,這是一個(gè)強(qiáng)大的模式,它使我們的功能能夠復(fù)用,并保持我們的代碼整潔。
使用class-based views重寫我們的API我們開始重寫編寫我們的root views。這一切都只涉及修改一點(diǎn)views.py文件。
from snippets.models import Snippet from snippets.serializers import SnippetSerializer from django.http import Http404 from rest_framework.views import APIView from rest_framework.response import Response from rest_framework import status class SnippetList(APIView): """ 列出所有的snippet,或者創(chuàng)建一個(gè)新的snippet. """ def get(self,request,format=None): snippet = Snippet.objects.all() serializer = SnippetSerializer(snippets,many=True) return Response(serializer.data) def post(self,request,format=None): serializer = SnippetSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data,status=status.HTTP_201_CREATED) return Response(serializer.error,status=status.HTTP_400_BAD_REQUEST)
它看起來和之前的實(shí)例相當(dāng)?shù)念愃?,但是我們更好的將不同的HTTP請求分離了。
我們也能夠更新我們的實(shí)例,在views.py文件中。
class SnippetDetail(APIView): """ 檢索,更新或者刪除一個(gè)snippet 實(shí)例。 """ def get_object(self,pk): try: return Snippet.objects.get(pk=pk) except Snippet.DoesNotExist: return Hppt404 def get(self,request,pk,format=None): snippet = self.get_object(pk) serializer = SnippetSerializer(snippet) return Response(serializer.data) def put(self,request,pk,format=None): snippet = self.get_object(pk) serializer = SnippetSerializer(snippet,data=request.data) if serializer.is_valid(): serlalizer.save() return Response(serializer.data) return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST) def delete(self,request,pk,format=None) snippet = self.get_object(pk) snippet.delete() return Response(status=status.HTTP_204_NO_CONTENT)
我們還需要為我們的calss-based views添加url.
from django.conf.urls import url from rest_framework.urlpatterns import format_suffix_patterns from snippets import views urlpatterns = [ url(r"^snippets/$",views.SnippetList.as_view()), url(r"^snippets/(?P[0-9]+/$",views.SnippetDatail.as_view()), ] urlpatterns = format_suffix_patterns(urlpatterns)
Ok,我們完成了。
mixins大量使用class-based views的好處之一,可以讓我們輕易的組成可復(fù)用的組件。
我們需要使用的操作就 創(chuàng)建/檢索/更新/刪除。這些常見的行為我們可以使用REST framework 的 mixin classes。
接下來將展示使用mixin classes來組成我們的views。我們再一次來到views.py文件。
from snippets.models import Snippet from snippets.serializers import SnippetSerializer from rest_framework import mixins from rest_framework import generics class SnippetList(mixins.ListModelMixin,mixins.CreateModelMixin,generics.GenericAPIView): queryset = Snippet.objects.all() serializer_class = SnippetSerializer def get(self,request,*args,**kwargs): return self.list(request,*args,**kwargs) def post(self,request,*args,**kwargs): return self.create(request,*args,**kwargs)
來看看發(fā)生了什么,我們使用GenericAPIView來構(gòu)建我們的view,并添加了ListModelMixin和CreateModelMixin.
這個(gè)base class 包含了核心功能,mixin classes包含了.list()和.create()行為。我們能夠使用這些行為來構(gòu)建get和post.
class SnippetDetail(mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, generics.GenericAPIView): queryset = Snippet.objects.all() serializer_class = SnippetSerializer def get(self,request,*args,**kwargs): return self.retrieve(request,*args,**kwargs) def put(self,request,*args,**kwargs): return self.update(request,*args,**kwargs) def delete(self,request,*args,**kwargs): return self.destroy(request,*args,**kwargs)使用generic class-based views
使用mixin classes來重寫我們的代碼,比之前要稍微少寫一些,但是我們想更進(jìn)一步。REST framework 提供了mixed-in generic views,我們能夠使用它來裝飾我們的views.
from snippets.models import Snippet from snippets.serializers import SnippetSerializer from rest_framework import generics class SnippetList(generics.ListCreateAPIView): queryset = Snippet.objects.all() serializer = SnippetSerializer class SnippetDetail(generics.RetrieveUpdateDestroyAPIView): queryset = snippet.objects.all() serializer = SnippetSerializer
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/44456.html
摘要:官網(wǎng)地址個(gè)人學(xué)習(xí)筆記四我們也能夠使用來編寫我們的,而不是基于正如我們所看到的,這是一個(gè)強(qiáng)大的模式,它使我們的功能能夠復(fù)用,并保持我們的代碼整潔。檢索,更新或者刪除一個(gè)實(shí)例。接下來將展示使用來組成我們的。 (官網(wǎng)地址)[django rest framework個(gè)人學(xué)習(xí)筆記(四)————Tutorial] Class-based views 我們也能夠使用class-based view...
摘要:官網(wǎng)地址個(gè)人學(xué)習(xí)筆記四我們也能夠使用來編寫我們的,而不是基于正如我們所看到的,這是一個(gè)強(qiáng)大的模式,它使我們的功能能夠復(fù)用,并保持我們的代碼整潔。檢索,更新或者刪除一個(gè)實(shí)例。接下來將展示使用來組成我們的。 (官網(wǎng)地址)[django rest framework個(gè)人學(xué)習(xí)筆記(四)————Tutorial] Class-based views 我們也能夠使用class-based view...
摘要:本文主要是用來記錄自己學(xué)習(xí)的過程。其中可能會有很多自己的錯(cuò)誤理解。這里主要會用到的知識有百度百科阮一峰理解架構(gòu)其余請自行百度。所有的全局設(shè)置都放在的字典中。使用標(biāo)準(zhǔn)的權(quán)限,未認(rèn)證的用戶只讀權(quán)限不要忘記將添加到你的中。 本文主要是用來記錄自己學(xué)習(xí)django-rest-framework的過程。其中可能會有很多自己的錯(cuò)誤理解。 這里主要會用到的知識有 1. [django](https:...
摘要:本文主要是用來記錄自己學(xué)習(xí)的過程。其中可能會有很多自己的錯(cuò)誤理解。這里主要會用到的知識有百度百科阮一峰理解架構(gòu)其余請自行百度。所有的全局設(shè)置都放在的字典中。使用標(biāo)準(zhǔn)的權(quán)限,未認(rèn)證的用戶只讀權(quán)限不要忘記將添加到你的中。 本文主要是用來記錄自己學(xué)習(xí)django-rest-framework的過程。其中可能會有很多自己的錯(cuò)誤理解。 這里主要會用到的知識有 1. [django](https:...
摘要:本文主要是用來記錄自己學(xué)習(xí)的過程。其中可能會有很多自己的錯(cuò)誤理解。這里主要會用到的知識有百度百科阮一峰理解架構(gòu)其余請自行百度。所有的全局設(shè)置都放在的字典中。使用標(biāo)準(zhǔn)的權(quán)限,未認(rèn)證的用戶只讀權(quán)限不要忘記將添加到你的中。 本文主要是用來記錄自己學(xué)習(xí)django-rest-framework的過程。其中可能會有很多自己的錯(cuò)誤理解。 這里主要會用到的知識有 1. [django](https:...
閱讀 3268·2023-04-25 22:47
閱讀 3779·2021-10-11 10:59
閱讀 2314·2021-09-07 10:12
閱讀 4269·2021-08-11 11:15
閱讀 3440·2019-08-30 13:15
閱讀 1757·2019-08-30 13:00
閱讀 976·2019-08-29 14:02
閱讀 1692·2019-08-26 13:57