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

資訊專欄INFORMATION COLUMN

django rest framework個(gè)人學(xué)習(xí)筆記(四)————Tutorial2.Reques

rockswang / 943人閱讀

摘要:引入了一個(gè)繼承于的對(duì)象,并提供更靈活的解析。只處理而且只適用于方法處理所有數(shù)據(jù),適用于也引入了對(duì)象,它是一個(gè)類型,并根據(jù)客戶端需求正確返回需要的類型。為每個(gè)狀態(tài)碼提供了更為明確的標(biāo)識(shí)符。注意我們不再明確指定和的響應(yīng)類型。

官網(wǎng)地址

Request 和 Response

這一章將開始覆蓋Rest framework的核心。讓我們來(lái)介紹一些基礎(chǔ)組件。

Restquest object

Rest framework 引入了一個(gè)繼承于django HttpRequest的對(duì)象Request,并提供更靈活的解析。
Request的核心是request.data屬性,他類似于request.POST,但對(duì)web api更有用。

request.POST #只處理form data,而且只適用于"POST"方法
request.data #處理所有數(shù)據(jù),適用于 "POST","PUT","PATCH"
Response Object

Rest framework 也引入了Response對(duì)象,它是一個(gè)TemplateResponse類型,并根據(jù)客戶端需求正確返回需要的類型。

return Response(data) # 根據(jù)客戶端的需求返回不同的類型。
Status codes

在你的views中使用HTTP狀態(tài)碼,總是不太容易閱讀的,而且稍不注意,你會(huì)返回一個(gè)錯(cuò)誤的狀態(tài)碼。Rest framework為每個(gè)狀態(tài)碼提供了更為明確的標(biāo)識(shí)符。例如 status模塊中的 HTTP_400-BAD_REQUEST

裝飾API views

REST framework為你提供了兩個(gè)裝飾器,你能夠使用它們來(lái)寫你的API views。

@api_view裝飾器適用于function based views

APIView裝飾器適用于 class-based views
這些方法提供一些功能,例如確保你的view收到的請(qǐng)求類型是Request,并將上下文添加到Response當(dāng)中,這樣就能根據(jù)客戶端的需要返回。

裝飾器還提供行為,例如適當(dāng)?shù)臅r(shí)候返回405 Method Not Allowed和當(dāng)訪問(wèn)request.data或者輸入錯(cuò)誤時(shí),處理所有的"ParseError"異常。

結(jié)合之前的內(nèi)容

好,來(lái)開始使用新的組件來(lái)寫我們的views。
我們?cè)僖膊恍枰?b>views.py中使用JSONResonse了。我們來(lái)開始重構(gòu)我們的views.

from rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response
from snippets.models import Snippet
from snippets.serializers import SnippetSerializer


@api_view(["GET", "POST"])
def snippet_list(request):
    """
    List all snippets, or create a new snippet.
    """
    if request.method == "GET":
        snippets = Snippet.objects.all()
        serializer = SnippetSerializer(snippets, many=True)
        return Response(serializer.data)

    elif request.method == "POST":
        serializer = SnippetSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

我們所展示的示例view和之前相比,有了相當(dāng)大的進(jìn)展。它更小更簡(jiǎn)潔,如果我們正在使用Form API,會(huì)發(fā)現(xiàn)這個(gè)代碼非常的相似。我們也能夠使用 named status codes

接下來(lái),我們將在views.py模塊中展示一個(gè)snippet的詳情。

@api_view(["GET","PUT","DELETE"])
def snippet_detail(request,pk)
"""
檢索,更新或者刪除一個(gè)snippet
"""
    try:
        snippet = Snippet.objects.get(pk=pk)
    except Snippet.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)
        
    if request.method == "GET":
        serializer = SnippetSerializer(snippet)
        return Response(serializer.date)
    elif request.method == "PUT":
        serializer = SnippetSerializer(snippet,data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors,status=status.HTPP_400_BAD_REQUEST)
        
    elif request.method == "DELETE":
        snippe.delete()
        return Response(status.status.HTTP_204_NO_CONTENT)

這一切都應(yīng)該感覺特別熟悉-它和標(biāo)準(zhǔn)的Django views沒(méi)多少不同。

注意:我們不再明確指定 request和response的響應(yīng)類型。request.data能夠處理所有進(jìn)來(lái)的json請(qǐng)求,但他也能夠處理其他的格式。同樣,我們?cè)趓esponse中返回我們的數(shù)據(jù),但是由REST framework 來(lái)幫助我們來(lái)為不同的請(qǐng)求做出正確的響應(yīng)內(nèi)容。

添加url

為我們剛才編寫的兩個(gè)view添加url.

def snippet_list(request,format=None)
def snippet_detail(request,pk,format=None)

現(xiàn)在,我們稍微修改一下我們的urls.py文件。

from django.conf.urls import url
from rest_framework.urlpatterns import format_suffix_patterns
from snippets import views

urlpatterns = [
    url(r"^snippets/$",views.snippet_list),
    url(r"^snippets/(?P[0-9]+)$",views.snippet_detail),
]

urlpatterns = format_suffix_patterns(urlpatterns)

我們不是必須要添加這些額外的url patterns,但是它給我們一個(gè)簡(jiǎn)單,干凈的特定格式。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

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

相關(guān)文章

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

    摘要:引入了一個(gè)繼承于的對(duì)象,并提供更靈活的解析。只處理而且只適用于方法處理所有數(shù)據(jù),適用于也引入了對(duì)象,它是一個(gè)類型,并根據(jù)客戶端需求正確返回需要的類型。為每個(gè)狀態(tài)碼提供了更為明確的標(biāo)識(shí)符。注意我們不再明確指定和的響應(yīng)類型。 官網(wǎng)地址 Request 和 Response 這一章將開始覆蓋Rest framework的核心。讓我們來(lái)介紹一些基礎(chǔ)組件。 Restquest object Re...

    IamDLY 評(píng)論0 收藏0
  • django rest framework個(gè)人學(xué)習(xí)筆記)————Tutorial2.Reques

    摘要:引入了一個(gè)繼承于的對(duì)象,并提供更靈活的解析。只處理而且只適用于方法處理所有數(shù)據(jù),適用于也引入了對(duì)象,它是一個(gè)類型,并根據(jù)客戶端需求正確返回需要的類型。為每個(gè)狀態(tài)碼提供了更為明確的標(biāo)識(shí)符。注意我們不再明確指定和的響應(yīng)類型。 官網(wǎng)地址 Request 和 Response 這一章將開始覆蓋Rest framework的核心。讓我們來(lái)介紹一些基礎(chǔ)組件。 Restquest object Re...

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

    摘要:官網(wǎng)地址個(gè)人學(xué)習(xí)筆記四我們也能夠使用來(lái)編寫我們的,而不是基于正如我們所看到的,這是一個(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)編寫我們的,而不是基于正如我們所看到的,這是一個(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í)筆記(五)————Tutorial3.Class-

    摘要:官網(wǎng)地址個(gè)人學(xué)習(xí)筆記四我們也能夠使用來(lái)編寫我們的,而不是基于正如我們所看到的,這是一個(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...

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

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

0條評(píng)論

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