国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

django rest framework個(gè)人學(xué)習(xí)筆記(五)————Tutorial3.Class-

channg / 3284人閱讀

摘要:官網(wǎng)地址個(gè)人學(xué)習(xí)筆記四我們也能夠使用來(lái)編寫(xiě)我們的,而不是基于正如我們所看到的,這是一個(gè)強(qiáng)大的模式,它使我們的功能能夠復(fù)用,并保持我們的代碼整潔。檢索,更新或者刪除一個(gè)實(shí)例。接下來(lái)將展示使用來(lái)組成我們的。

(官網(wǎng)地址)[django rest framework個(gè)人學(xué)習(xí)筆記(四)————Tutorial]

Class-based views

我們也能夠使用class-based view 來(lái)編寫(xiě)我們的API views,而不是基于function based views.正如我們所看到的,這是一個(gè)強(qiáng)大的模式,它使我們的功能能夠復(fù)用,并保持我們的代碼整潔。

使用class-based views重寫(xiě)我們的API

我們開(kāi)始重寫(xiě)編寫(xiě)我們的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)

它看起來(lái)和之前的實(shí)例相當(dāng)?shù)念?lèi)似,但是我們更好的將不同的HTTP請(qǐng)求分離了。
我們也能夠更新我們的實(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)建/檢索/更新/刪除。這些常見(jiàn)的行為我們可以使用REST framework 的 mixin classes。
接下來(lái)將展示使用mixin classes來(lái)組成我們的views。我們?cè)僖淮蝸?lái)到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)

來(lái)看看發(fā)生了什么,我們使用GenericAPIView來(lái)構(gòu)建我們的view,并添加了ListModelMixinCreateModelMixin.
這個(gè)base class 包含了核心功能,mixin classes包含了.list().create()行為。我們能夠使用這些行為來(lái)構(gòu)建getpost.

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來(lái)重寫(xiě)我們的代碼,比之前要稍微少寫(xiě)一些,但是我們想更進(jìn)一步。REST framework 提供了mixed-in generic views,我們能夠使用它來(lái)裝飾我們的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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/40839.html

相關(guān)文章

  • django rest framework個(gè)人學(xué)習(xí)筆記)————Tutorial3.Class-

    摘要:官網(wǎng)地址個(gè)人學(xué)習(xí)筆記四我們也能夠使用來(lái)編寫(xiě)我們的,而不是基于正如我們所看到的,這是一個(gè)強(qiáng)大的模式,它使我們的功能能夠復(fù)用,并保持我們的代碼整潔。檢索,更新或者刪除一個(gè)實(shí)例。接下來(lái)將展示使用來(lái)組成我們的。 (官網(wǎng)地址)[django rest framework個(gè)人學(xué)習(xí)筆記(四)————Tutorial] Class-based views 我們也能夠使用class-based view...

    Sanchi 評(píng)論0 收藏0
  • django rest framework個(gè)人學(xué)習(xí)筆記)————Tutorial3.Class-

    摘要:官網(wǎng)地址個(gè)人學(xué)習(xí)筆記四我們也能夠使用來(lái)編寫(xiě)我們的,而不是基于正如我們所看到的,這是一個(gè)強(qiáng)大的模式,它使我們的功能能夠復(fù)用,并保持我們的代碼整潔。檢索,更新或者刪除一個(gè)實(shí)例。接下來(lái)將展示使用來(lái)組成我們的。 (官網(wǎng)地址)[django rest framework個(gè)人學(xué)習(xí)筆記(四)————Tutorial] Class-based views 我們也能夠使用class-based view...

    wenshi11019 評(píng)論0 收藏0
  • django rest framework個(gè)人學(xué)習(xí)筆記(一)————Install

    摘要:本文主要是用來(lái)記錄自己學(xué)習(xí)的過(guò)程。其中可能會(huì)有很多自己的錯(cuò)誤理解。這里主要會(huì)用到的知識(shí)有百度百科阮一峰理解架構(gòu)其余請(qǐng)自行百度。所有的全局設(shè)置都放在的字典中。使用標(biāo)準(zhǔn)的權(quán)限,未認(rèn)證的用戶只讀權(quán)限不要忘記將添加到你的中。 本文主要是用來(lái)記錄自己學(xué)習(xí)django-rest-framework的過(guò)程。其中可能會(huì)有很多自己的錯(cuò)誤理解。 這里主要會(huì)用到的知識(shí)有 1. [django](https:...

    yuxue 評(píng)論0 收藏0
  • django rest framework個(gè)人學(xué)習(xí)筆記(一)————Install

    摘要:本文主要是用來(lái)記錄自己學(xué)習(xí)的過(guò)程。其中可能會(huì)有很多自己的錯(cuò)誤理解。這里主要會(huì)用到的知識(shí)有百度百科阮一峰理解架構(gòu)其余請(qǐng)自行百度。所有的全局設(shè)置都放在的字典中。使用標(biāo)準(zhǔn)的權(quán)限,未認(rèn)證的用戶只讀權(quán)限不要忘記將添加到你的中。 本文主要是用來(lái)記錄自己學(xué)習(xí)django-rest-framework的過(guò)程。其中可能會(huì)有很多自己的錯(cuò)誤理解。 這里主要會(huì)用到的知識(shí)有 1. [django](https:...

    yagami 評(píng)論0 收藏0
  • django rest framework個(gè)人學(xué)習(xí)筆記(一)————Install

    摘要:本文主要是用來(lái)記錄自己學(xué)習(xí)的過(guò)程。其中可能會(huì)有很多自己的錯(cuò)誤理解。這里主要會(huì)用到的知識(shí)有百度百科阮一峰理解架構(gòu)其余請(qǐng)自行百度。所有的全局設(shè)置都放在的字典中。使用標(biāo)準(zhǔn)的權(quán)限,未認(rèn)證的用戶只讀權(quán)限不要忘記將添加到你的中。 本文主要是用來(lái)記錄自己學(xué)習(xí)django-rest-framework的過(guò)程。其中可能會(huì)有很多自己的錯(cuò)誤理解。 這里主要會(huì)用到的知識(shí)有 1. [django](https:...

    idisfkj 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<