Django REST Framework 簡介:使用示例進行開發

已發表: 2020-10-05

Django REST 框架作為標準 Python 包廣泛分發,用戶可能需要它來開始開發 RESTful API。 它複雜、功能強大、非常易於使用,並為 API 提供了一個有吸引力且可瀏覽的版本。 Django REST 框架提供了返回 JSON 對象的選項。 該框架提供了強大的模型序列化功能,並在完全 REST 查看器中完全使用基於基本功能的視圖來顯示數據。 了解更多關於以下Django REST 框架的信息

目錄

什麼是 Django REST 框架?

Django REST Framework 是一個靈活且健壯的工具包,可讓開發人員輕鬆構建 Web API。 它還為 API 提供基於類的通用視圖和序列化程序。 作為一個源代碼,它被縮寫為 DRF,它代表一個用於開發 Web 應用程序編程接口的 Python 庫。 與本文一樣,我們正在討論帶有分步說明的開發 API。

但在開始使用本指南之前,重要的是要了解該框架為何如此重要。 許多可用的框架允許開發人員輕鬆地為其塊應用程序構建 API,但首選 Django REST 框架。 該框架易於以多種方式使用,並具有以下優點-

  • 它為 Web 瀏覽器提供了一個強大的應用程序編程接口,這對開發人員來說是一個巨大的勝利
  • 它具有身份驗證策略,包括 OAuth1、OAuth2 等的包
  • 其中的序列化處理器支持 ORM 和非 ORM 數據源
  • 這個框架有大量的文檔並且提供了很好的社區支持
  • 它被偉大的平台使用和信任,包括 Mozilla、Heroku、RedHat 等。

閱讀: Django 應用程序:你需要知道的一切

設置 Django REST 框架開發

對於初學者,您必須為操作系統安裝 Python 依賴項。 如果您使用的是 Windows 平台,您可以通過虛擬框或手動命令輕鬆地將 Linux 平台安裝為您的輔助操作系統。 要繼續使用該框架,您可以使用有效且方便的 Python 管理工具。

大多數工具都是首選助手。 它們允許開發人員快速更改 Python 版本、設置項目特定版本、管理虛擬環境以及在系統上安裝多個版本。 如果您使用的是 Linux 或 Mac 操作系統,安裝它會很容易。

Django REST 框架的幫助下,我們可以將非 RESTful 應用程序轉換為 RESTful 應用程序。 這包括以下提到的程序-

DRF 設置

對於 DRF 設置,您必須安裝 -

貝殼

$ pip install djangorestframework

$ pip freeze > requirements.txt

更新設置:py:

Python

INSTALLED_APPS = (

'django.contrib.admin',

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.messages',

'django.contrib.staticfiles',

'講話',

'rest_framework'

)

RESTful 結構

在 RESTful API 開發中,端點表示其結構和用戶在 GET、PUT、POST、DELETE 等方法的幫助下從應用程序訪問。 這些端點在邏輯上圍繞元素和集合進行組織,這兩者都被視為資源。 如果只有一個資源,則相應的鏈接將用作元素和集合的 URL。

得到

郵政

刪除

/帖子/

顯示所有帖子

添加新帖子

更新所有帖子

刪除所有帖子

/posts/<id>

顯示 <id>

不適用

更新 <id>

刪除標識

序列化器和視圖

Django REST 框架的主要構建塊是序列化器,它們用於詳細說明基於 Django 模型的各種數據記錄的表示。 序列化器是標準的 Python 類,可以從框架中繼承模型的行為。

在序列化程序類中,存在使用同一框架包中的數據類型的單獨字段集。 他們還注意到框架和類之間的相似之處。 序列化程序類本身不會思考,它們與管理大量 REST 服務邏輯的視圖集成在一起。 此外,它使用序列化程序類來轉換數據。 例如,一個常規的 Django 視圖方法是——

從 coffeehouse.stores.models 導入商店

從咖啡屋.stores.serializers 導入 StoreSerializer

從 rest_framework.decorators 導入 api_view

從 rest_framework.response 導入響應

@api_view(['GET','POST','DELETE'])

def rest_store(請求):

如果 request.method == 'GET':

商店 = Store.objects.all()

序列化器 = StoreSerializer(商店,許多 = True)

返迴響應(serializer.data)

elif request.method == 'POST':

… #用於 HTTP POST 操作的邏輯

elif request.method == '刪除':

… #用於 HTTP DELETE 操作的邏輯

基於類的視圖

在基於類的視圖的幫助下, Django REST 框架提供了對用戶最高和復雜功能的訪問。 基於類的視圖提供了真正成熟的 Python 類的功能,並允許 Django 視圖在面向對象的編程原則的幫助下輕鬆操作,從而實現更高的可重用性和更短的實現時間。

Django 基於類的視圖突出了構建 Django 視圖的強大方法,它們也是用於構建 API 的方法的替代方法。 要開發基於類的視圖,重要的是創建一個可以從其他類之一繼承的類。 例如:

#views.py

從 Django.views.generic 導入 TemplateView

關於索引類(模板視圖):

模板名稱 = 'index.html'

def get_context_data(self, **kwargs):

# **kwargs 包含關鍵字上下文初始化值(如果有)

# 調用基本實現以獲取上下文

context = super(AboutIndex, self).get_context_data(**kwargs)

# 添加上下文數據以傳遞給模板

context['aboutdata'] = '自定義數據'

返回上下文

# urls.py

從咖啡屋.about.views 導入 AboutIndex

from django.urls 導入路徑

網址模式 = [

path('about/index/',AboutIndex.as_view(),{'onsale':True}),

結帳:針對初學者的 12 大 Django 面試問題和答案

更新視圖

為了適應 RESTful 應用程序結構,重構當前視圖很重要。 您可以註釋掉這些視圖並將它們添加為-

Python

從 django.shortcuts 導入渲染

從 django.http 導入 HttpResponse

從 rest_framework.decorators 導入 api_view

從 rest_framework.response 導入響應

從talk.models導入帖子

從 talk.serializers 導入 PostSerializer

從 talk.forms 導入 PostForm

默認主頁(請求):

tmpl_vars = {'form': PostForm()}

返回渲染(請求,'talk/index.html',tmpl_vars)

@api_view(['GET'])

def post_collection(請求):

如果 request.method == 'GET':

帖子 = Post.objects.all()

序列化器 = PostSerializer(posts, many=True)

返迴響應(serializer.data)

@api_view(['GET'])

def post_element(請求,pk):

嘗試:

post = Post.objects.get(pk=pk)

除了 Post.DoesNotExist:

返回 HttpResponse(狀態=404)

如果 request.method == 'GET':

序列化器 = PostSerializer(post)

返迴響應(serializer.data)

解釋

  • 在上面給出的指令中,@api_view 裝飾器分析了相應的 HTTP 請求,該請求被傳遞到視圖函數中。
  • 現在視圖要么使用單個帖子,如果它是一個元素,或者抓取整個數據,如果它是集合
  • 最後,數據現在被序列化為 JSON 並相應返回

Web 可瀏覽 API 或更新的 URL

Python 的一些更新的 URL 是:

# 談話網址

從 django.conf.urls 導入模式,URL

urlpatterns = 模式(

'talk.views',

網址(r'^$','家'),

# 接口

url(r'^api/v1/posts/$', 'post_collection'),

url(r'^api/v1/posts/(?P<pk>[0-9]+)$', 'post_element')

)

RESTful API 集成重構

它包括主要的 HTTP 方法,例如-

得到

初始頁面加載,顯示帖子很重要,為此,您可以添加以下請求:

加載帖子()

// 在頁面加載時加載所有帖子

函數 load_posts() {

$.ajax({

url : “api/v1/posts/”, // 端點

type : “GET”, // http 方法

// 處理成功的響應

成功:函數(json){

for (var i = 0; i < json.length; i++) {

控制台.log(json[i])

$(“#talk”).prepend(“<li id='post-“+json[i].id+”'><strong>”+json[i].text+”</strong> – <em>” +json[i].author+”</em> – <span>“+json[i].created+

“</span> – <a id='delete-post-“+json[i].id+”'>刪除我</a></li>”);

}

},

// 處理不成功的響應

錯誤:函數(xhr,errmsg,err){

$('#results').html(“<div class='alert-box alert radius' data-alert>糟糕!我們遇到了錯誤:“+errmsg+

” <a href='#' class='close'>&times;</a></div>”); // 將錯誤添加到 dom

console.log(xhr.status + “:” + xhr.responseText); // 向控制台提供有關錯誤的更多信息

}

});

};

郵政

POST 請求以類似的方式進行管理,您可以通過更新視圖來測試這一點。 你可以在views.py中更新post_collection()函數:

@api_view(['GET', 'POST'])

def post_collection(請求):

如果 request.method == 'GET':

帖子 = Post.objects.all()

序列化器 = PostSerializer(posts, many=True)

返迴響應(serializer.data)

elif request.method == 'POST':

data = {'text': request.DATA.get('the_post'), 'author': request.user.pk}

序列化器= PostSerializer(數據=數據)

如果 serializer.is_valid():

序列化器.save()

返迴響應(serializer.data,status=status.HTTP_201_CREATED)

返迴響應(serializer.errors,狀態=狀態。HTTP_400_BAD_REQUEST)

另請閱讀:印度的 Django 開發人員薪水

底線

實際的Django REST framework的 REST 部分非常簡單,您所要做的就是更新 post 元素函數以處理請求。 如果您仍有任何疑問,那麼有許多 Django REST 框架和資源可用於即興創作。

如果您有興趣了解有關 Django 和其他全棧開發人員語言和工具的更多信息,請查看 upGrad 和 IIIT-B 的全棧軟件開發 PG 文憑,該文憑專為在職專業人士設計,提供 500 多個小時的嚴格培訓, 9 個以上的項目和任務、IIIT-B 校友身份、實用的實踐頂點項目和頂級公司的工作協助。

為未來的職業做準備

升級和 IIIT-BANGALORE 的 PG 文憑在全棧軟件開發中
今天報名