rest_framework01:前后端分離\規范\簡單例子(查詢某本書)

?web 開發模式

RESTful規范

1 數據的安全保障

  • url鏈接一般都采用https協議進行傳輸

    注:采用https協議,可以提高數據交互過程中的安全性

2 接口特征表現

  • 用api關鍵字標識接口url:

    • https://api.baidu.com
    • https://www.baidu.com/api

    注:看到api字眼,就代表該請求url鏈接是完成前后臺數據交互的

3 多數據版本共存

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

    • https://api.baidu.com/v1
    • https://api.baidu.com/v2

    注:url鏈接中的v1、v2就是不同數據版本的體現(只有在一種數據資源有多版本情況下)

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

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

    • https://api.baidu.com/users
    • https://api.baidu.com/books
    • https://api.baidu.com/book

    注:一般提倡用資源的復數形式,在url鏈接中獎勵不要出現操作資源的動詞,錯誤示范:https://api.baidu.com/delete-user

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

    • https://api.baidu.com/place/search
    • https://api.baidu.com/login

5 資源操作由請求方式決定(method)

  • 操作資源一般都會涉及到增刪改查,我們提供請求方式來標識增刪改查動作
    • https://api.baidu.com/books - get請求:獲取所有書
    • https://api.baidu.com/books/1 - get請求:獲取主鍵為1的書
    • https://api.baidu.com/books - post請求:新增一本書書
    • https://api.baidu.com/books/1 - put請求:整體修改主鍵為1的書
    • https://api.baidu.com/books/1 - patch請求:局部修改主鍵為1的書
    • https://api.baidu.com/books/1 - delete請求:刪除主鍵為1的書

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

  • https://api.example.com/v1/zoos?limit=10:指定返回記錄的數量
  • https://api.example.com/v1/zoos?offset=10:指定返回記錄的開始位置
  • https://api.example.com/v1/zoos?page=2&per_page=100:指定第幾頁,以及每頁的記錄數
  • https://api.example.com/v1/zoos?sortby=name&order=asc:指定返回結果按照哪個屬性排序,以及排序順序
  • https://api.example.com/v1/zoos?animal_type_id=1:指定篩選條件

7 響應狀態碼

7.1 正常響應

  • 響應狀態碼2xx
    • 200:常規請求
    • 201:創建成功

7.2 重定向響應

  • 響應狀態碼3xx
    • 301:永久重定向
    • 302:暫時重定向

7.3 客戶端異常

  • 響應狀態碼4xx
    • 403:請求無權限
    • 404:請求路徑不存在
    • 405:請求方法不存在

7.4 服務器異常

  • 響應狀態碼5xx
    • 500:服務器異常

8 錯誤處理,應返回錯誤信息,error當做key

{error: "無權限操作"
}

9 返回結果,針對不同操作,服務器向用戶返回的結果應該符合以下規范

GET /collection:返回資源對象的列表(數組)
GET /collection/resource:返回單個資源對象
POST /collection:返回新生成的資源對象
PUT /collection/resource:返回完整的資源對象
PATCH /collection/resource:返回完整的資源對象
DELETE /collection/resource:返回一個空文檔

10 需要url請求的資源需要訪問資源的請求鏈接

# Hypermedia API,RESTful API最好做到Hypermedia,即返回結果中提供鏈接,連向其他API方法,使得用戶不查文檔,也知道下一步應該做什么
{"status": 0,"msg": "ok","results":[{"name":"肯德基(羅餐廳)","img": "https://image.baidu.com/kfc/001.png"}...]
}
# 響應數據要有狀態碼、狀態信息以及數據本身
{"status": 0,"msg": "ok","results":[{"name":"肯德基(羅餐廳)","location":{"lat":31.415354,"lng":121.357339},"address":"月羅路2380號","province":"上海市","city":"上海市","area":"寶山區","street_id":"339ed41ae1d6dc320a5cb37c","telephone":"(021)56761006","detail":1,"uid":"339ed41ae1d6dc320a5cb37c"}...]
}

Django REST framework

1.DRF需要以下依賴:

  • Python (2.7, 3.2, 3.3, 3.4, 3.5, 3.6)
  • Django (1.10, 1.11, 2.0)

DRF是以Django擴展應用的方式提供的,所以我們可以直接利用已有的Django環境而無需從新創建。(若沒有Django環境,需要先創建環境安裝Django)

2.安裝


pip install djangorestframework
pip install pymysql

?或在pycharm里安裝django-rest-framework

settings.pyINSTALLED_APPS中添加’rest_framework’。

INSTALLED_APPS = [...'rest_framework',
]

3.連接數據庫,建立ORM模型

ps:簡單實用數據庫可以使用django自帶,不需要配置過參數。

4.寫序列化類

想序列化那個字段,就寫那個字段

from rest_framework import serializersclass BookSerializer(serializers.Serializer):id=serializers.CharField()name=serializers.CharField()price=serializers.CharField()author=serializers.CharField()publish=serializers.CharField()

5. 在視圖類中,實例化的到序列化的對象

a.使用rest_framework的Response

b.book_ser.data是字典

from rest_framework.views import APIView
from app01.models import Book
from app01.ser import BookSerializer
from rest_framework.response import Responseclass BookView(APIView):def get(self,request,pk):book=Book.objects.filter(id=pk).first()book_ser=BookSerializer(book) #調用類的__init__# book_ser.data 序列化對象.data 就是序列化后的字典return Response(book_ser.data)

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

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

相關文章

.NET Core如何通過SSL訪問MongoDB?

【.NET Core】| 總結/Edison Zhou大家好,我是Edison。最近有一個ASP.NET Core通過SSL證書訪問MongoDB的需求,但是在網上發現資料很少,于是調查了一番,做了如下的筆記,希望對你有用。背景在實際場景中,開發環…

SQA

一、長大一條龍SQA計劃 SQA計劃需要包含軟件工程質量保證、質量控制、數據收集和統計報告這四方面內容,計劃以時間為線索,小組內成員為對象,以下為我組的工作計劃: 時間 任務 需完成的情況 2017年10月 用戶登錄注冊后臺實現 …

在pom.xml中配置nexus上傳地址

2019獨角獸企業重金招聘Python工程師標準>>> <distributionManagement> <repository> <id>thirdparty</id> <url>http://&#xff5b;nexusIP地址&#xff5d;:8081/nexus/content/repositories/thi…

網頁背景平鋪_在大約十秒鐘內為網頁創建無縫平鋪背景

網頁背景平鋪Creating a background image for your webpage (or desktop background) isn’t challenging at all. In fact, even a newbie Photoshop user can bash one out in about ten seconds. Here’s the simplest of simple methods with surprising, great results. …

9月11日學習內容整理:正則表達式,re模塊

一、正則表達式&#xff1a;正則是很大的一個知識點&#xff0c;不會僅僅是下面這些東西 1、概念&#xff1a;正則表達式就是一種對字符串匹配的規則&#xff0c;注意是只對字符串&#xff0c;正則表達式和python沒啥關系&#xff0c; 2、表達式&#xff1a; &#xff08;1&…

rest_framework02:修改數據/校驗鉤子/read_only和write_only

修改數據 1.傳入數據&#xff0c;選中data&#xff0c;以及修改data book_ser BookSerializer(instancebook, datarequest.data) 2.校驗&#xff0c;通過則保存。 if book_ser.is_valid(): # 返回True 表示驗證通過book_ser.save() # 不是book.save() rest_framework…

MongoDB的安裝與使用

MongoDB是一款NoSql數據庫。NoSql數據庫叫非關系型數據庫&#xff0c;NoSql的全名Not only sql。是為了解決高并發、高可用、高可擴展&#xff0c;以及大數據存儲等一系列問題而產生的數據庫解決方案。NoSql&#xff0c;它不能替代關系型數據庫&#xff0c;只能作為關系型數據庫…

linux 基準測試_如何對Linux系統進行基準測試:3個開源基準測試工具

linux 基準測試Linux’s command-line utilities can do anything, including perform benchmarks – but using a dedicated benchmarking program is a simpler and more foolproof process. These utilities allow you to perform reproducible tests across different syst…

.NET 7 新增的 IParsable 接口介紹

.NET 7 是一個新版本的 .NET&#xff0c;它新增了一個名為 IParsable 的接口。這個接口可以幫助開發人員更容易地在代碼中解析字符串。IParsable 接口包含兩個方法&#xff1a;Parse 和 TryParse。Parse 方法用于將一個字符串解析為指定類型的值。如果解析失敗&#xff0c;則會…

CentOS 7安裝nginx+php+mysql環境

0x01 安裝php 1、首先得安裝第三方軟件庫 yum install epel-release 復制代碼2、安裝依賴包 yum install gcc gcc-c glibc libmcrypt-devel mhash-devel libxslt-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-de…

spring+springMvc+struts的SSH框架整合

1.建立一個web項目 2.導入SSH框架所需jar包 3.配置web.xml文件 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xmlns"http://java.sun.com/xml/ns/javaee" xsi:sc…

聽說這個語言認知服務又出新功能了?

點擊上方藍字關注我們&#xff08;本文閱讀時間&#xff1a;7分鐘)語言是人類智能發展的基石。鑒于語言擁有普遍性&#xff0c;幾乎沒有特定的技術或 AI 技術得以顛覆整個社會。微軟的使命是賦能地球上的每個人和每個組織&#xff0c;幫助他們取得更多成就。立足于該使命&#…

強大的XML

2018-04-23 20:29:26 XML&#xff1a;Extensible Markup Language&#xff0c;也就是可擴展標記語言。XML和HTML格式是古老的標記通用語言SGML的衍生語言。 XML文件是可以用來作為配置文件的&#xff0c;相比于其他配置文件的規范&#xff0c;XML的好處在于通過自定義的標記&am…

rest_framework03:查詢所有/新增數據/刪除一個數據/封裝Response/序列化與反序列化

查詢所有 1.創建新clase和url&#xff0c;避免與查詢一個功能邏輯混亂。 2.增加manyTrue&#xff0c; book_serBookSerializer(books,manyTrue) urls.py: path(books/,views.BooksView.as_view()) views.py class BooksView(APIView):def get(self,request):response_msg …

如何對DevOps數據庫進行源代碼控制

提綱&#xff1a; 包括索引在內的數據庫模式需要進行源代碼控制諸如查詢表這類用于控制業務邏輯的數據需要進行源代碼控制開發人員需要一種能夠便捷地創建本地數據庫的方法共享數據庫的更新只能通過構建服務器完成 健壯的DevOps環境需要對系統的每個組件進行持續集成。但是&…

自定義異常最佳實踐_播放,自定義和組織媒體的最佳文章

自定義異常最佳實踐Computers today are used for much more than generating documents, writing and receiving email, and surfing the web. We also use them to listen to music, watch movies and TV shows, and to transfer media to and from mobile devices. 如今&…

CSS中的路徑裁剪樣式clip-path

前面的話 CSS借鑒了SVG裁剪的概念&#xff0c;設置了clip-path樣式&#xff0c;本文將詳細介紹路徑裁剪clip-path 概述 clip-path屬性可以防止部分元素通過定義的剪切區域來顯示&#xff0c;僅通過顯示的特殊區域。剪切區域是被URL定義的路徑代替行內或者外部svg&#xff0c;或…

socket編程學習筆記

socket編程&#xff1a; 1、網絡基礎知識 兩臺計算機通過網絡進行通信&#xff0c;首先兩臺計算機要有唯一的標識&#xff0c;即唯一的IP地址。其次他們要有共同的語言用來交流即協議。再者&#xff0c;每套主機要有相應的端口號。  TCP/IP協議&#xff1a;   --TCP/IP協議是…

rest_framework04:ModelSerializer/Serializer高級用法

ModelSerializer 1.減小序列化類代碼 2.不需要重寫update&#xff0c;create ser.py class BookModelSerializer(serializers.ModelSerializer):class Meta:modelBookfields__all__ #序列化全部字段# fields(name,price) # 序列化指定字段# exclude(name,) # 與fields 不能…

配置本地及網絡yum源(詳細步驟)

我們以centos6為范例演示 1、[rootCentos6 ~]# cd /etc/yum.repos.d/ [rootCentos6 yum.repos.d]# ls CentOS-Base.repo CentOS-fasttrack.repo CentOS-Vault.repoCentOS-Debuginfo.repo CentOS-Media.repo先羅列出相關文件 2、[rootCentos6 yum.repos.d]# vim CentOS-Base.rep…