drf-drf入門規范
一 Web開發模式
前后端混合開發模式:
- 前端寫模板,后端處理完數據再渲染后再傳給前端展示效果
![image]()
前后端分離開發模式:
- 前端發送請求把數據傳給后端,后端查詢數據處理完以json格式返回給前端,前端渲染完展示頁面
![image]()
二 API接口
API四大特點
# api接口:通過網絡,規定了前后臺信息交互規則的url鏈接,也就是前后臺信息交互的媒介
https://www.baidu.com/books/--->json 格式數據/xml格式---》接口
json格式:{''}字符串
xml格式:HTML
# Web API接口和一般的url鏈接還是有區別的,Web API接口簡單概括有下面四大特點
1 url:長得像返回數據的url鏈接
https://api.map.baidu.com/place/v2/search
2 請求方式:get、post、put、patch、delete
3 請求參數:json或xml格式的key-value類型數據
-ak:6E823f587c95f0148c19993539b99295
-region:上海
-query:肯德基
-output:json
4 響應結果:json或xml格式的數據
https://api.map.baidu.com/place/v2/search?ak=6E823f587c95f0148c19993539b99295®ion=%E4%B8%8A%E6%B5%B7&query=%E8%82%AF%E5%BE%B7%E5%9F%BA&output=json
# 數據由ajax技術自動轉為json格式(字符串)傳到后端,后端轉為別的格式處理完再以json格式返回給前端
三 接口測試工具
工具:
-postman:瀏覽器插件,收費
-apifox:Postman + Swagger(接口文檔) + Mock(假數據) + JMeter(壓測工具)
-postwoman:開源
# 下載和安裝
-https://www.postman.com/
-雙擊:Postman-win64-Setup.exe 下載后的軟件
postman的路由地址:
1、不會自動補充/
2、在瀏覽器中會自動補充/,因為它有重定向,當報錯是3xx時,會自動再發送一次請求



postman前端編碼格式(重要)
1、前端不同編碼格式
1、urlencoded
body體中:username=lqz&password=123 django的request.POST取出值
2、json
body體中 :{"username":"lqz","password":"123"} django 的request.POST取不出值
3、form-data
body中格式固定:數據部分和文件部分--》request.POST能取出數據,取不出文件,文件都是從request.FILES
# 以后一般只傳文件,不會文件和數據一起修改
'----------------------------789048583058585187025897\r\nContent-Disposition: form-data; name="username"\r\n\r\nlqz\r\n 文件二進制' # 上傳圖片文件,返回數據,前面是路由,后面是圖片的二進制
# hander請求頭
# \n請求尾
# \r\n\r\n結束
2、不用pycharm創建項目
- django-admin startproject 項目名
3、django中的文件對象和原來的文件對象
-django:from django.core.files.uploadedfile import InMemoryUploadedFile
-原生文件:_io.BufferedWriter
-django中文件類沒有繼承原生文件類,但是由原生文件類所有方法
四 RESTful API規范
RESTful是一種定義Web API接口的設計風格,尤其適用于前后端分離的應用模式中
事實上,我們可以使用任何一個框架都可以實現符合restful規范的API接口。
4.1 數據的安全保障
- url鏈接一般采用https協議進行傳輸
https是:http+ssl 安全的超文本傳輸協議
4.2 接口特征表現
4.3 多數據版本共存
4.4 數據即是資源,均使用名詞(可復數)
- 前后端交互,交互的數據稱之為資源
- url盡量使用名詞,除特殊接口用動詞如:登錄、注冊
- https://127.0.0.1/api/v1/books/
表示對圖書操作:增加、刪除、查詢、修改
注意: 用同個地址 - https://127.0.0.1/api/v1/get_all_books/
注意:不符合restful規范 - https://127.0.0.1/api/v1/delete_books/
注意: 不符合restful規范
4.5 資源操作由請求方式決定(method)
-get 請求獲取數據(獲取所有,獲取單條)
-post 新增數據
-put 修改數據
-delete 刪除數據
- 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的書
4.6 請求地址中帶過濾條件
- 只針對于搜索所有接口
get請求
4.7 響應狀態碼(兩層)
-1xx表示請求正在處理:前端一般看不到
-2xx 表示請求處理成功:經常看到
- 200:常規請求
- 201:創建成功
-3xx:重定向
- 301:永久重定向
- 302:暫時重定向
-4xx:客戶端錯誤
- 403:請求無權限
- 404:請求路徑不存在
- 405:請求方法不存在
-5xx:服務端出錯
- 500:服務器異常
-MySQL錯誤操作都會有數字(如:10060) 和文字解釋
錯誤代碼 錯誤信息 詳細描述
10001 System error 系統錯誤
10002 Service unavailable 服務暫停
10003 Remote service error 遠程服務錯誤
10004 IP limit IP限制不能請求該資源
10005 Permission denied, need a high level appkey 該資源需要appkey擁有授權
4.8 響應中帶錯誤信息
{
"code": 101,
"msg": "用戶名或密碼錯誤"
}
4.9 不同操作,服務器返回格式符合如下標準
GET /collection:返回資源對象的列表(數組)
# [{name:西游記,price:19},{name:三國,price:19}]
GET /collection/resource:返回單個資源對象
# {name:三國,price:19}
POST /collection:返回新生成的資源對象
# {name:三國,price:19}
PUT /collection/resource:返回完整的資源對象
# {name:三國演繹,price:19}修改
PATCH /collection/resource:返回完整的資源對象
DELETE /collection/resource:返回一個空文檔
4.10 響應中帶鏈接
- "url": "http://blog.sina.com.cn/zaku",
五 序列化
序列化(jump):把我們識別的數據轉換成指定的格式給別人
例如:把數據(python對象:字典、列表)變成字符串或json格式給前端
反序列化(load):把別人給的數據轉換/還原成我們需要的格式
例如:把前端js的json數據,對于python是字符串,給后端轉換成對象(字典、列表等)
六 Django Rest_Framework
官方文檔:https://www.django-rest-framework.org/
github: https://github.com/encode/django-rest-framework/tree/master
安裝
1 django 是2版本,用不了drf最新(適當降版本),他會卸載django--->裝最新4.x
2 djagno 3.1.12 可以使用drf最新
django:3.1.12
drf:3.14.0
前提是已經安裝了django,建議安裝在虛擬環境
pip install djangorestframework
pip install pymysql
創建django項目
cd ~/Desktop
django-admin startproject drfdemo
添加rest_framework應用
INSTALLED_APPS = [
'rest_framework', # 一定不要忘了加 ,
]




浙公網安備 33010602011771號