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