1. 程式人生 > >Django 之 restful api(未完待續)

Django 之 restful api(未完待續)

Restful api

符合REST架構設計的API叫做restful api。
那麼什麼是REST呢?REST是所有Web應用都應該遵守的架構設計指導原則。
Representational State Transfer,翻譯是”表現層狀態轉化”。
面向資源是REST最明顯的特徵,對於同一個資源的一組不同的操作。資源是伺服器上一個可命名的抽象概念,資源是以名詞為核心來組織的,首先關注的是名詞。REST要求,必須通過統一的介面來對資源執行各種操作。對於每個資源只能執行一組有限的操作。(7個HTTP方法:GET/POST/PUT/DELETE/PATCH/HEAD/OPTIONS)

其實說到底,restful api 就是一種統一規範的api設計風格


在django中可以使用djangorestframework 來快速開發規範的restful api,當然也可以自己按照restful的規範來自行開發。

範例

GET /zoos:列出所有動物園
POST /zoos:新建一個動物園
GET /zoos/ID:獲取某個指定動物園的資訊
PUT /zoos/ID:更新某個指定動物園的資訊(提供該動物園的全部資訊)
PATCH /zoos/ID:更新某個指定動物園的資訊(提供該動物園的部分資訊)
DELETE /zoos/ID:刪除某個動物園
GET /zoos/ID/animals:列出某個指定動物園的所有動物
DELETE /zoos/ID/animals/ID:刪除某個指定動物園的指定動物

Django Rest framework

圖片
- 建立 Models
- 依靠 Serialiers 將資料庫取出的資料 Parse 為 API 的資料(可用於返回給客戶端,也可用於瀏覽器顯示)
- ViewSet 是一個 views 的集合,根據客戶端的請求(GET、POST等),返回 Serialiers 處理的資料許可權 Premissions 也在這一步做處理
- ViewSet 可在 Routers 進行註冊,註冊後會顯示在 Api Root 頁上
- 在 urls 裡註冊 ViewSet 生成的 view,指定監聽的 url

# 以rmdb 的idc為例,來寫一個簡單的restful api
# 這是models.py class Idc(models.Model): ch_name = models.CharField("機房中文名稱", max_length=32, unique=True, null=True) en_name = models.CharField("機房英文名稱", max_length=32, unique=True, null=True) address = models.CharField("機房地址", max_length=100, null=True, blank=True) ip_range = models.CharField("IP範圍", max_length=64, null=True) bandwidth = models.CharField("接入頻寬", max_length=32, null=True) add_person = models.CharField("新增人", max_length=50, null=True) add_time = models.CharField("新增時間", max_length=50, null=True) description = models.TextField("備註", max_length=100, null=True, blank=True) def __str__(self): return self.en_name class Meta: verbose_name = '機房' verbose_name_plural = '機房' ######################################################## # 然後寫序列化檔案 # serializers.py from rmdb.models import * from rest_framework import serializers class IdcSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Idc fields = '__all__' # fields = ('id','ch_name','en_name','address','bandwidth','description') ######################################################### # 再寫view檔案 # view.py from rmdb.models import * from rest_framework import viewsets from rest_framework import permissions from restapi.serializers import IdcSerializer class IdcViewSet(viewsets.ModelViewSet): queryset = Idc.objects.all().order_by('-add_time') serializer_class = IdcSerializer permission_classes = (permissions.IsAuthenticated,) ######################################################### # 最後寫url檔案 # urls.py from django.conf.urls import include, url from rest_framework import routers from restapi.views import IdcViewSet router = routers.DefaultRouter() router.register(r'idc', IdcViewSet) urlpatterns = [ url(r'^', include(router.urls)), ] ## 然後就可以用瀏覽器或者命令列訪問測試了,一個簡單的restful api就完成了。

相關推薦

Django restful api待續

Restful api 符合REST架構設計的API叫做restful api。 那麼什麼是REST呢?REST是所有Web應用都應該遵守的架構設計指導原則。 Representational

Qt例項-UCF資料標註4介面佈局待續

1.問題描述:放在主函式裡面resize和在建構函式中resize一個有效果一個沒有效果 2.問題描述:layout對mainwindow沒用,對dialog有效果,即mainwindow放大縮小時,當QLabel控制元件指定大小後,不隨視窗的改變而改變。 3.問題描述:如

學習筆記——HOG、LBP與Haar特徵待續

本博文為HOG、LBP與Haar運算元的學習筆記。   方向梯度直方圖HOG 主要參考博文如下: https://blog.csdn.net/wjb820728252/article/details/78395092(這篇博文翻譯水平真的太爛了,可以參考裡面給的原連結)

學習筆記——前景檢測演算法待續

    這段時間,本人主要對視訊前景提取演算法進行了學習,在此寫下學習筆記~希望與各位看客多交流學習(本學習筆記部分來自我的三位師弟的調研報告~由於保密隱私,不在此公開,但是非常感謝三位師弟~),好下面進入正題 前景是影象或視訊場景中可見性、顯著性更強的部分。前

Java Swing使用者介面元件選擇元件簡介待續

對使用者介面進行設計時,很多情況下都需要給使用者以選項做出選擇。因此常常會用到選擇元件,其中包括:複選框元件(JCheckBox)、單選框元件(JRadioButton)等。本篇文章主要介紹了Java Swing元件複選框JCheckBox用法,結合具體例項形

作業系統-Linux硬體裝置命名待續

摘要: 本篇部落格僅作為筆記,如有侵權,請聯絡,立即刪除(網上找部落格學習,然後手記筆記,因紙質筆記不便儲存,所以儲存到網路筆記)。   下表列出雞哥常見的裝置與其在Linux中的檔名: 裝置 裝置在Linux內的檔名 IDE硬碟機 /dev

Vue--Vue例項的一些理解待續

直接上程式碼: var app = {sanfu:"vueJS是一個好框架"} var vm = new Vue({ el:"#container", data:app })

jq+layuitable表每行的編輯按鈕只能點擊觸發一次的問題的解決待續

控制臺 技術分享 目標 分享圖片 地方 觸發 div 一次 可見   在寫好表之後,測試時會發現,當你點擊第一行的“修改”,突然不想修改了,關閉了“修改”的彈窗,但是這時候你想到剛才第一行的修改還有地方要修改,你重新點擊“修改”按鈕,這時候它似乎故意跟你過不去似的,修

Linux Framebuffer驅動框架二軟體架構待續

/************************************************************************************************************************************/

web前端開發面試題待續

tex ora 相對 設置 erl 思路 實現 多列 寬度 一、HTML與XHTML的不同:1)XHTML元素必須被正確地嵌套 2)元素必須被關閉 如:<h1>……&l

待續機器學習教程視頻資料匯總

提升 isp pla blog sso 相關 學習機 you mage 在學習機器學習的過程中,我陸陸續續收集了些免費的教程資料,希望能和您共享。 如果您有好的網站希望分享就評論吧,我也會整理到文章中。 1 機器學習基礎篇 (1)課程資源 吳恩達《機器學習》cou

HTML基礎知識待續

表示 部分 round sub 常用 內部 換行 jquery 頁面 一、HTML編輯工具:Sublime Text 二、HTML實體字符:1、( 空格):&nbsp; 2、(<) &lt; 3、(>)&gt; 4、(&)&

復旦大學數學學院高等代數歷屆期中考試大題精選待續

math 變換 $1 教材 com 考試 b- lambda rda 本文收集了從 2009 年至今復旦大學數學學院高等代數歷屆期中考試精選的大題, 其中有的大題由習題課老師或任課老師自編而來, 有的大題由其他大學的教材或學習指導書中的題目或考研試題改編而來, 也有相當部分

關於數組的深度克隆待續

地址 關於 們的 type ++ ole 進行 ray nbsp 我們知道,Array.prototype上有一個slice()方法,可以對數組進行克隆,但是這個方法並不完美。如果一個數組是一維數組,使用slice()方法沒有任何問題,但如果是一個多維數組,那麽這個方法就不

輸入輸出框架待續

+= windows ble 之前 返回值 nbsp 最小值 標準 logs 輸入一些整數,求出它們的最小值、最大值和平均值(保留3位小數)。 輸入保證這些數都是不超過1000的整數。 樣例輸入: 2 8 3 5 1 7 3 6 樣例輸出: 1 8 4.375 #incl

讀caffe源碼待續

樣本 源碼解析 單元 最小 size 傳遞 strong 統一 news caffe源碼閱讀雜記 準備 一些參考網頁 Neural Networks and Deep Learning TUTORIAL ON DEEP LEARNING FOR VISION Deep

ex36 自己編的一個冒險小遊戲待續

may num eth front exit import dea org island 1 #-*- coding: UTF-8 -*- 2 from sys import exit 3 #作出判斷選擇進森林還是出海冒險 4 def start():

關於閉包待續

onload light ++ com targe foo sharp () jquer <script src="~/js/jquery.min.js"></script> <script>

0基礎手把手教你搭建webpack運行打包項目待續

蘊含 必須 asc 工具 過程 更多 關系圖 本地服務 spa   這些天在項目之余的時間學習了webpack打包項目的東西,非常榮幸的找到一些大神的文章來學習,死勁嚼了幾天,終於略知一二。在以後的工作上還需繼續學習,下面我將分享我這幾天學到的一點東西,希望能讓我一個還不算

CSS寫作建議和性能優化總結待續

小結 body 補充 代碼 寫作 體積 性能優化 logs 一點 這裏是我從網上的一篇文章看過來的,這裏先做一點小結,之後再補充。 1.CSS渲染規則 今天在微博的一篇文章上看到的,之前我都以為渲染是從左往右渲染。發現我的想法是錯的。之所以采用從右往左的渲染規則,是因為這樣