Python 如何開發出RESTful Web接口,DRF框架助力靈活實現!

Django Rest Framework(DRF)是構建強大且靈活的Web API的優秀工具。它基于Django,提供了一套用于構建Web API的組件和工具,簡化了API開發過程,同時保留了Django的優雅和強大。

一、Web應用模式

在開發Web應用時,通常有兩種開發模式。

1、前后端不分離

前端頁面看到的效果都是由后端控制,由后端渲染頁面或重定向,前端與后端的耦合度很高。

這種應用模式比較適合純網頁應用,但是當后端對接App時,App可能并不需要后端返回一個HTML網頁,而僅僅是數據本身,所以后端原本返回網頁的接口不再適用于前端App應用,為了對接App后端還需再開發一套接口。

2、前后端分離

后端僅返回前端所需的數據,不再渲染HTML頁面,不再控制前端的效果。

至于前端用戶看到什么效果,從后端請求的數據如何加載到前端中,都由前端自己決定,網頁有網頁的處理方式,App有App的處理方式,但無論哪種前端,所需的數據基本相同,后端僅需開發一套邏輯對外提供數據即可。

前后端分離模式優點:

  • ? 提升開發效率

  • ? 完美應對復雜多變的前端需求

  • ? 增強代碼可維護性

二、什么是API 接口?

API(應用程序接口)是一組定義了軟件組件如何互相交互的規范。

API 是一些功能、定義或者協議的集合,通過 API 接口實現計算機軟件之間的相互通信。對外封裝完善,調用時無需學習 API 內部源碼,依據 API 文檔功能說明書來使用即可。

API 同時也是一種中間件,為各種不同平臺提供數據共享。

API接口的數據格式有哪些?

目前 API 接口支持 XLSX、JSON、XML、CSV、RDF 等數據格式,其中 JSON 和 XML 是主流的數據格式,幾乎所有 API 接口都支持這兩種數據格式。

RESTful API 是一種基于REST架構風格設計的API。它使用統一的接口和狀態無關的通信方式來實現各種網絡應用。這種設計風格使得RESTful API具有簡單、靈活、可擴展和易于理解的特點,因此在Web開發中得到了廣泛的應用。

Django Rest Framework 正是基于Rest架構風格設計的一款 后端API 框架。

三、RESTful API

RESTful 是一種定義 Web API 接口的設計風格,尤其適用于前后端分離的應用模式中。

這種風格的理念認為后端開發任務就是提供數據的,對外提供的是數據資源的訪問接口,所以在定義接口時,客戶端訪問的URL路徑就表示這種要操作的數據資源。

事實上,我們可以使用任何一個框架都可以實現符合restful規范的API接口。

1、數據安全

RESTful API 鏈接一般都采用https協議進行傳輸,以提高數據交互過程中的安全性。

2、接口特征

通常用api關鍵字標識接口url。

https://api.github.io/   
https://github.io/api

3、多數據版本共存

在url鏈接中標識數據版本。

https://api.github.io/v1   
https://github.io/api/v2

注:url鏈接中的v1、v2就是不同數據版本的體現(一種數據資源有多版本情況下,也適用于新舊版本間)

4、數據即是資源,均使用名詞(可復數)

接口一般都是完成前后臺數據的交互,交互的數據我們稱之為資源。

https://api.github.io/v1/users

注:一般提倡用資源的復數形式,在url鏈接中千萬不要出現操作資源的動詞

錯誤示范:https://api.github.io/v1/delete-user

特殊的接口可以出現動詞,因為這些接口一般沒有一個明確的資源,或是動詞就是接口的核心含義

https://api.github.io/login

5、資源操作由請求方式決定

操作資源一般都會涉及到增刪改查,我們提供請求方式來標識增刪改查動作。

https://api.github.io/users - get請求:獲取所有用戶   
https://api.github.io/users/1 - get請求:獲取ID為1的用戶   
https://api.github.io/users - post請求:新增一個用戶   
https://api.github.io/users/1 - put請求:整體修改ID為1的用戶   
https://api.github.io/users/1 - patch請求:局部修改ID為1的用戶   
https://api.github.io/users/1 - delete請求:刪除ID為1的用戶

6、通過在url上傳參的形式傳遞搜索條件

https://api.github.io/v1/projects?page=5&per_page=10  指定第幾頁,以及每頁的記錄數

7、錯誤處理,應返回錯誤信息

{       error: "服務器發生錯誤"   }

四、Django Rest Framework

1、DRF 簡介

Django REST framework 是一個建立在Django基礎之上的Web 應用開發框架,可以快速的開發REST API接口應用。

DRF優點:

  • 提供了定義序列化器Serializer的方法,可以快速根據 Django ORM 或者其它庫自動序列化/反序列化;

  • 提供了豐富的類視圖、Mixin擴展類,簡化視圖的編寫;

  • 豐富的定制層級:函數視圖、類視圖、視圖集合到自動生成 API,滿足各種需要;

  • 多種身份認證和權限認證方式的支持 JWT;

  • 內置了限流系統;

  • 直觀的 API web 界面;

  • 可擴展性,插件豐富

2、安裝和設置

首先,確保你的項目已經安裝了Django。然后,使用以下命令安裝DRF:

pip install djangorestframework

接下來,在你的Django項目的settings.py中添加以下行:

INSTALLED_APPS = [       # ...       'rest_framework',   ]

然后,配置你的URL以包含DRF的路由:

from django.urls import path, include      
urlpatterns = [       
# ...       
path('api/', include('rest_framework.urls')),   
]

3、創建一個簡單的API視圖

現在,我們來創建一個簡單的API視圖。首先,定義一個序列化器:

from rest_framework import serializers      
class MyModelSerializer(serializers.ModelSerializer):       class Meta:           model = MyModel           fields = 'all'

然后,創建一個基于類的視圖:

from rest_framework import generics   
from .models import MyModel   
from .serializers import MyModelSerializer      
class MyModelListView(generics.ListCreateAPIView):       queryset = MyModel.objects.all()       serializer_class = MyModelSerializer

最后,在你的urls.py中添加這個視圖:

from django.urls import path   
from .views import MyModelListView      
urlpatterns = [       
# ...       
path('mymodel/', MyModelListView.as_view(), name='mymodel-list'),   
]

現在,你已經創建了一個簡單的API視圖,可以通過/api/mymodel/訪問。

五、結語

本篇文章小圈只是做了一個簡單的引入以及介紹,DRF有很多其他功能和選項,可以滿足更復雜的API需求。比如:更豐富的類視圖、身份認證與權限管理等,后續小圈會抽空根據案例為大家帶來更精細化的DRF學習教程。現在我們可以通過深入研究DRF文檔和示例,更好地利用這個強大的工具。

希望這篇博文能夠幫助你開始使用Django Rest Framework,構建出強大且高效的Web API。祝大家編碼愉快!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/164297.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/164297.shtml
英文地址,請注明出處:http://en.pswp.cn/news/164297.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android組件化搭建學習

什么是組件化? 為什么要用組件化?在項目的開發過程中,隨著開發人員的增多及功能的增加,如果提前沒有使用合理的開發架構,那么代碼會越來臃腫,功能間代碼耦合也會越來越嚴重,這時候為了保證項目…

C# 忽略大小寫

在 C# 中,你可以通過以下幾種方式來忽略大小寫: 使用 ToLower 或 ToUpper 方法將字符串轉換為全小寫或全大寫,然后進行比較。使用 Compare 或 CompareOrdinal 方法,并傳入正確的 StringComparer 實例以指示比較應該忽略大小寫。使…

Android 開發Java調用Kotlin提示包不存在

在kotlin代碼所在module的build.gradle設置 plugins {id org.jetbrains.kotlin.android }

Unity中Shader的Standard材質解析(一)

文章目錄 前言一、在Unity中,按一下步驟準備1、在資源管理面板創建一個 Standard Surface Shader2、因為Standard Surface Shader有很多缺點,所以我們把他轉化為頂點片元著色器3、整理只保留主平行光的Shader效果4、精簡后的最終代碼 前言 在Unity中&am…

基于Springboot+Vue選課系統

選課系統要求 (1)數據庫表:教師信息表、學生信息表、課程表、選課表 其中,教師信息表、學生信息表和選課表的數據需要提前設置,本題主要操作課程表 (2) 技術架構: 后臺使用springboot 前端使用vue-admin-template (3) 考試時間&…

鴻蒙(HarmonyOS)應用開發——安裝DevEco Studio安裝

前言 HarmonyOS華為開發的操作系統,旨在為多種設備提供統一的體驗。它采用了分布式架構,可以在多個設備上同時運行,提供更加流暢的連接和互動。HarmonyOS的目標是提供更高的安全性、更高效、響應更快的用戶體驗,并通過跨設備功能…

Vue3 響應式數據 reactive使用

ref 與 reactive 是 vue3 提供給我們用于創建響應式數據的兩個方法。 reactive 常用于創建引用數據,例如:object、array 等。 reactive 則是通過 proxy 來實現的響應式數據,并配合 reflect 操作的源對象。 reactive 創建引用數據&#xff1…

【實戰精選】掌握圖像風格遷移:構建基于生成對抗網絡的系統

1.研究背景與意義 隨著計算機技術的不斷發展,圖像處理和計算機視覺領域取得了長足的進步。圖像風格遷移是其中一個備受關注的研究方向,它可以將一幅圖像的風格特征應用到另一幅圖像上,從而創造出新的圖像。這項技術具有廣泛的應用前景&#…

lazada商品詳情數據接口(lazada.item_get)

Lazada商品詳情數據接口是Lazada電商平臺提供的一個API接口,用于獲取商品詳細信息。通過這個接口,開發者可以獲取Lazada平臺上商品的豐富信息,包括商品名稱、價格、庫存、描述、圖片等。這個接口使用RESTful風格,并通過HTTP協議進…

經過了多少輪洗牌后,序列中間位置的牌面為9 ← random.shuffle()

【題目描述】 有牌面為1~9的撲克牌,現在進行洗牌,并存于一個序列中。 請輸出經過了多少輪洗牌后,序列中間位置的牌面為9。【算法分析】 Python 中使用 random 模塊中的 shuffle 函數,可隨意排列列表中的元素。 本題中的輸出&#…

【基礎知識】AB軟件RSLinx的版本說明

哈嘍,大家好,我是雷工! 之前對AB的軟件了解比較少,在工作中未接觸過,最近一次現場勘察時,有很多中控系統都是AB的,借此機會對AB軟件有了些許了解。 一、RSLinx是什么軟件? RSLinx是…

fork介紹,返回值問題,寫時拷貝,進程切換,子進程開始執行的位置,子進程的用途

目錄 fork 介紹 fork的返回值問題 介紹 fork()時,系統要做什么 數據是否要獨立 如果共享的話,就會出現問題! 寫時拷貝 引入 介紹 舉例(fork返回值) fork返回的值是什么 創建失敗的原因 子進程執行位置從哪里開始 引入 進程切換 子進程執行的位置 子進程的…

燙傷事件屢有發生,覓光推脫責任,稱是用戶操作失誤

提及“雙十一”“直播間”等關鍵詞,人們常常將其與“低價”“薅羊毛”等字眼掛鉤。而在近日,科技美容品牌AMIRO覓光(下稱“覓光”)卻上演了一出“反向薅羊毛”的戲碼,因線上線下渠道相差超千元的價格差飽受爭議。 自橫…

camera-caps:Jetson設備上的一種實用的V4L2可視化界面

camera-caps:Jetson設備上的一種實用的V4L2可視化界面 github地址是: https://github.com/jetsonhacks/camera-caps 注意:Jetpack5.x需要選擇tag 5.x版本

走迷宮(BFS寬度優先搜索)

給定一個 nm 的二維整數數組,用來表示一個迷宮,數組中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通過的墻壁。 最初,有一個人位于左上角 (1,1)處,已知該人每次可以向上、下、左、右任意一個方向移動…

MySQL數據庫約束你真的懂嗎?

??????今天給各位帶來的是關于數據庫約束方面的知識 清風的CSDN博客 😛😛😛希望我的文章能對你有所幫助,有不足的地方還請各位看官多多指教,大家一起學習交流! 動動你們發財的小手,點點關…

JMeter接口測試之文件上傳

最近用JMeter做接口測試,頻繁遇到了文件上傳的接口,與其他一般接口的處理方式不一樣,想著分享下,希望能給測試同學一點啟發。 文章將圍繞三個部分進行展開: 一、用戶場景 二、接口請求參數 三、JMeter腳本編寫步驟…

C語言每日一題(36)隊列實現棧功能

力扣 225 用隊列實現棧 題目描述 請你僅使用兩個隊列實現一個后入先出(LIFO)的棧,并支持普通棧的全部四種操作(push、top、pop 和 empty)。 實現 MyStack 類: void push(int x) 將元素 x 壓入棧頂。int…

vue2系列 — 自定義指令

https://v2.cn.vuejs.org/v2/guide/custom-directive.html <div v-example:foo.bar"baz">vue 自定義指令的鉤子 bind&#xff1a; 當 v-XXX 指令綁定到節點上時 觸發inserted&#xff1a;被綁定元素插入父節點時調用update&#xff1a;所在組件的 VNode 更新…