摘要:引入了一個(gè)繼承于的對(duì)象,并提供更靈活的解析。只處理而且只適用于方法處理所有數(shù)據(jù),適用于也引入了對(duì)象,它是一個(gè)類(lèi)型,并根據(jù)客戶端需求正確返回需要的類(lèi)型。為每個(gè)狀態(tài)碼提供了更為明確的標(biāo)識(shí)符。注意我們不再明確指定和的響應(yīng)類(lèi)型。
官網(wǎng)地址
Request 和 Response這一章將開(kāi)始覆蓋Rest framework的核心。讓我們來(lái)介紹一些基礎(chǔ)組件。
Restquest objectRest framework 引入了一個(gè)繼承于django HttpRequest的對(duì)象Request,并提供更靈活的解析。
Request的核心是request.data屬性,他類(lèi)似于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類(lèi)型,并根據(jù)客戶端需求正確返回需要的類(lèi)型。
return Response(data) # 根據(jù)客戶端的需求返回不同的類(lèi)型。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 viewsREST framework為你提供了兩個(gè)裝飾器,你能夠使用它們來(lái)寫(xiě)你的API views。
@api_view裝飾器適用于function based views
APIView裝飾器適用于 class-based views
這些方法提供一些功能,例如確保你的view收到的請(qǐng)求類(lèi)型是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)開(kāi)始使用新的組件來(lái)寫(xiě)我們的views。
我們?cè)僖膊恍枰?b>views.py中使用JSONResonse了。我們來(lái)開(kā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)該感覺(jué)特別熟悉-它和標(biāo)準(zhǔn)的Django views沒(méi)多少不同。
注意:我們不再明確指定 request和response的響應(yīng)類(lèi)型。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為我們剛才編寫(xiě)的兩個(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/45453.html
摘要:引入了一個(gè)繼承于的對(duì)象,并提供更靈活的解析。只處理而且只適用于方法處理所有數(shù)據(jù),適用于也引入了對(duì)象,它是一個(gè)類(lèi)型,并根據(jù)客戶端需求正確返回需要的類(lèi)型。為每個(gè)狀態(tài)碼提供了更為明確的標(biāo)識(shí)符。注意我們不再明確指定和的響應(yīng)類(lèi)型。 官網(wǎng)地址 Request 和 Response 這一章將開(kāi)始覆蓋Rest framework的核心。讓我們來(lái)介紹一些基礎(chǔ)組件。 Restquest object Re...
摘要:引入了一個(gè)繼承于的對(duì)象,并提供更靈活的解析。只處理而且只適用于方法處理所有數(shù)據(jù),適用于也引入了對(duì)象,它是一個(gè)類(lèi)型,并根據(jù)客戶端需求正確返回需要的類(lèi)型。為每個(gè)狀態(tài)碼提供了更為明確的標(biāo)識(shí)符。注意我們不再明確指定和的響應(yīng)類(lèi)型。 官網(wǎng)地址 Request 和 Response 這一章將開(kāi)始覆蓋Rest framework的核心。讓我們來(lái)介紹一些基礎(chǔ)組件。 Restquest object Re...
摘要:官網(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...
摘要:官網(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...
摘要:官網(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...
閱讀 1061·2023-04-26 02:02
閱讀 2401·2021-09-26 10:11
閱讀 3553·2019-08-30 13:10
閱讀 3743·2019-08-29 17:12
閱讀 720·2019-08-29 14:20
閱讀 2187·2019-08-28 18:19
閱讀 2230·2019-08-26 13:52
閱讀 954·2019-08-26 13:43