摘要:引入了一個繼承于的對象,并提供更靈活的解析。只處理而且只適用于方法處理所有數(shù)據(jù),適用于也引入了對象,它是一個類型,并根據(jù)客戶端需求正確返回需要的類型。為每個狀態(tài)碼提供了更為明確的標(biāo)識符。注意我們不再明確指定和的響應(yīng)類型。
官網(wǎng)地址
Request 和 Response這一章將開始覆蓋Rest framework的核心。讓我們來介紹一些基礎(chǔ)組件。
Restquest objectRest framework 引入了一個繼承于django HttpRequest的對象Request,并提供更靈活的解析。
Request的核心是request.data屬性,他類似于request.POST,但對web api更有用。
request.POST #只處理form data,而且只適用于"POST"方法 request.data #處理所有數(shù)據(jù),適用于 "POST","PUT","PATCH"Response Object
Rest framework 也引入了Response對象,它是一個TemplateResponse類型,并根據(jù)客戶端需求正確返回需要的類型。
return Response(data) # 根據(jù)客戶端的需求返回不同的類型。Status codes
在你的views中使用HTTP狀態(tài)碼,總是不太容易閱讀的,而且稍不注意,你會返回一個錯誤的狀態(tài)碼。Rest framework為每個狀態(tài)碼提供了更為明確的標(biāo)識符。例如 status模塊中的 HTTP_400-BAD_REQUEST。
裝飾API viewsREST framework為你提供了兩個裝飾器,你能夠使用它們來寫你的API views。
@api_view裝飾器適用于function based views
APIView裝飾器適用于 class-based views
這些方法提供一些功能,例如確保你的view收到的請求類型是Request,并將上下文添加到Response當(dāng)中,這樣就能根據(jù)客戶端的需要返回。
裝飾器還提供行為,例如適當(dāng)?shù)臅r候返回405 Method Not Allowed和當(dāng)訪問request.data或者輸入錯誤時,處理所有的"ParseError"異常。
結(jié)合之前的內(nèi)容好,來開始使用新的組件來寫我們的views。
我們再也不需要在views.py中使用JSONResonse了。我們來開始重構(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)展。它更小更簡潔,如果我們正在使用Form API,會發(fā)現(xiàn)這個代碼非常的相似。我們也能夠使用 named status codes。
接下來,我們將在views.py模塊中展示一個snippet的詳情。
@api_view(["GET","PUT","DELETE"]) def snippet_detail(request,pk) """ 檢索,更新或者刪除一個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沒多少不同。
注意:我們不再明確指定 request和response的響應(yīng)類型。request.data能夠處理所有進(jìn)來的json請求,但他也能夠處理其他的格式。同樣,我們在response中返回我們的數(shù)據(jù),但是由REST framework 來幫助我們來為不同的請求做出正確的響應(yīng)內(nèi)容。
添加url為我們剛才編寫的兩個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,但是它給我們一個簡單,干凈的特定格式。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/44457.html
摘要:引入了一個繼承于的對象,并提供更靈活的解析。只處理而且只適用于方法處理所有數(shù)據(jù),適用于也引入了對象,它是一個類型,并根據(jù)客戶端需求正確返回需要的類型。為每個狀態(tài)碼提供了更為明確的標(biāo)識符。注意我們不再明確指定和的響應(yīng)類型。 官網(wǎng)地址 Request 和 Response 這一章將開始覆蓋Rest framework的核心。讓我們來介紹一些基礎(chǔ)組件。 Restquest object Re...
摘要:引入了一個繼承于的對象,并提供更靈活的解析。只處理而且只適用于方法處理所有數(shù)據(jù),適用于也引入了對象,它是一個類型,并根據(jù)客戶端需求正確返回需要的類型。為每個狀態(tài)碼提供了更為明確的標(biāo)識符。注意我們不再明確指定和的響應(yīng)類型。 官網(wǎng)地址 Request 和 Response 這一章將開始覆蓋Rest framework的核心。讓我們來介紹一些基礎(chǔ)組件。 Restquest object Re...
摘要:官網(wǎng)地址個人學(xué)習(xí)筆記四我們也能夠使用來編寫我們的,而不是基于正如我們所看到的,這是一個強(qiáng)大的模式,它使我們的功能能夠復(fù)用,并保持我們的代碼整潔。檢索,更新或者刪除一個實(shí)例。接下來將展示使用來組成我們的。 (官網(wǎng)地址)[django rest framework個人學(xué)習(xí)筆記(四)————Tutorial] Class-based views 我們也能夠使用class-based view...
摘要:官網(wǎng)地址個人學(xué)習(xí)筆記四我們也能夠使用來編寫我們的,而不是基于正如我們所看到的,這是一個強(qiáng)大的模式,它使我們的功能能夠復(fù)用,并保持我們的代碼整潔。檢索,更新或者刪除一個實(shí)例。接下來將展示使用來組成我們的。 (官網(wǎng)地址)[django rest framework個人學(xué)習(xí)筆記(四)————Tutorial] Class-based views 我們也能夠使用class-based view...
摘要:官網(wǎng)地址個人學(xué)習(xí)筆記四我們也能夠使用來編寫我們的,而不是基于正如我們所看到的,這是一個強(qiáng)大的模式,它使我們的功能能夠復(fù)用,并保持我們的代碼整潔。檢索,更新或者刪除一個實(shí)例。接下來將展示使用來組成我們的。 (官網(wǎng)地址)[django rest framework個人學(xué)習(xí)筆記(四)————Tutorial] Class-based views 我們也能夠使用class-based view...
閱讀 1225·2021-11-11 16:54
閱讀 1738·2021-10-13 09:40
閱讀 933·2021-10-08 10:05
閱讀 3498·2021-09-22 15:50
閱讀 3701·2021-09-22 15:41
閱讀 1782·2021-09-22 15:08
閱讀 2338·2021-09-07 10:24
閱讀 3571·2019-08-30 12:52