日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django中自定义实现RESTful API

發布時間:2025/3/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django中自定义实现RESTful API 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是restful api

可以總結為一句話:REST是所有Web應用都應該遵守的架構設計指導原則。 Representational State Transfer,翻譯是”表現層狀態轉化”。 面向資源是REST最明顯的特征,對于同一個資源的一組不同的操作。REST要求,必須通過統一的接口來對資源執行各種操作。對于每個資源只能執行一組有限的操作。(7個HTTP方法:GET/POST/PUT/DELETE/PATCH/HEAD/OPTIONS)

Restful API設計規范

1,資源。首先是弄清楚資源的概念。資源就是網絡上的一個實體,一段文本,一張圖片或者一首歌曲。資源總是要通過一種載體來反應它的內容。JSON是現在最常用的資源表現形式。

2,統一接口。RESTful風格的數據元操CRUD(create,read,update,delete)分別對應HTTP方法:GET用來獲取資源,POST用來新建資源(也可以用于更新資源),PUT用來更新資源,DELETE用來刪除資源,這樣就統一了數據操作的接口。

3,URI。可以用一個URI(統一資源定位符)指向資源,即每個URI都對應一個特定的資源。要獲取這個資源訪問它的URI就可以,因此URI就成了每一個資源的地址或識別符。一般的,每個資源至少有一個URI與之對應,最典型的URI就是URL。

4,無狀態。所謂無狀態即所有的資源都可以URI定位,而且這個定位與其他資源無關,也不會因為其他資源的變化而變化。有狀態和無狀態的區別,舉個例子說明一下,

例如要查詢員工工資的步驟為第一步:登錄系統。第二步:進入查詢工資的頁面。第三步:搜索該員工。第四步:點擊姓名查看工資。這樣的操作流程就是有狀態的,查詢工資的每一個步驟都依賴于前一個步驟,只要前置操作不成功,后續操作就無法執行。如果輸入一個URL就可以得到指定員工的工資,則這種情況就是無狀態的,因為獲取工資不依賴于其他資源或狀態,且這種情況下,員工工資是一個資源,由一個URL與之對應可以通過HTTP中的GET方法得到資源,這就是典型的RESTful風格。

RESTful API其他一些規范

1:應該將API的版本號放入URL。GET:http://www.xxx.com/v1/friend/123。或者將版本號放在HTTP頭信息中。

2:URL中只能有名詞而不能有動詞,URL只標識資源的地址,既然是資源那就是名詞了。

3:如果記錄數量很多,API應該提供參數,過濾返回結果。?limit=10:指定返回記錄的數量、?page=2&per_page=100:指定第幾頁,以及每頁的記錄數。

PS:我介紹的是自定義實現Django restful,當然Django中有一種更快捷、強大的方法,那就是 Django REST framework。它是python的一個模塊,通過在Django里面的配置就可以把app的models中的各個表實現RESTful API。``

RESTful API的簡單實現

目錄結構

具體代碼

準備:先在models中建一個Person類插入一些數據。

api_v1.py:

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' from django.forms import model_to_dict from django.http import QueryDict, JsonResponse from django.views.generic import View from app.models import *class PersonAPI(View):def get(self,req):data = Person.objects.all()person = [model_to_dict(i) for i in data]result = {'code':1,'msg':'數據查詢到了','data':person}return JsonResponse(result)def post(self,req):name = req.POST.get('name')age = req.POST.get('age')res = Person.objects.create(name = name,age = age)result = {'code':1,'msg':'數據創建成功','data':model_to_dict(res)}return JsonResponse(result)def delete(self,req):params = QueryDict(req.body)id = int(params.get('s_id'))res = Person.objects.get(pk=id)res.delete()result = {'code':1,'msg':'數據刪除成功','data':id}return JsonResponse(result)

當請求的方法不同時,會自動根據請求的方法分發到不同的函數方法來執行相應的操作。我這里只寫了三種方法,要是是這三種以外的方法訪問的話,會報405錯誤,說請求方法不被允許。

urls_api_v1.py:

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' from django.conf.urls import url from app.api_v1 import *urlpatterns = [url('^personapi$',PersonAPI.as_view()), ]

urls.py:

from django.conf.urls import url,include from django.contrib import adminurlpatterns = [url(r'^admin/', admin.site.urls),url(r'^api/v1/', include('app.urls_api_v1')), ]

總結

以上是生活随笔為你收集整理的Django中自定义实现RESTful API的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。