web開發的兩種模式:前後端不分離和前後端分離
RestFul API接口設計風格:前後端分離被廣泛採用
使用Django基礎自定義Rest API接口
DRF框架: 提高開發Rest API接口的效率
web開發的兩種模式
前後端不分離:前端看到的效果是由後端進行控制的
缺點:只適用於純網頁的應用。
優點:有利於網站的SEO優化。
前後端分離:後端只返回前端所需的數據,至於數據怎麼進行展示,由前端自己控制。
優點:可以對接不同類型的客戶端。
缺點:不利於SEO優化
RestFul API接口設計風格介紹
統一接口設計風格:
1.URL地址儘量使用名詞,不要出現動詞
2.使用不同的請求方式,代表要執行不同的操作
(GET)獲取 POST(新增) PUT(修改)DELETE(刪除)
不常用:PATCH(修改) HEAD(只返回請求頭沒有請求體) OPTIONS(獲取信息)
3.訪問URL地址時,如果有一些過濾的參數,參數可以放到查詢字符串中
4.響應數據:
GET /books/:返回所有的圖書數據
GET /books/1/:返回id爲1的圖書數據
POST /books/:將新增的圖書數據返回
PUT /books/1/:將修改的圖書數據返回
DELETE /books/1:返回空文檔
獲取|修改:200
新增:201
刪除:204
參數有誤:400
服務器出錯:500
5.響應數據的格式:json
瞭解:1.域名:使用專有域名
2.版本:將版本信息放在url地址
3.錯誤:將錯誤信息返回
4.在訪問api接口時,將和接口相關的其他API接口的地址也在響應數據中返回
Django自定義RestAPI
需求:
設計一套符合RestAPI風格的接口,提供以下5個接口:
1. 獲取所有圖書數據:GET /books/
2. 新增一本圖書數據:POST /books/
3. 獲取指定的圖書數據(根據id):GET /books/(?P<pk>\d+)/
4. 修改指定的圖書數據(根據id):PUT /books/(?P<pk>\d+)/
5. 刪除指定的圖書數據(根據id):DELETE /books/(?P<pk>\d+)/
# 2個類視圖
class BookListView(View):
# GET /books/
def get(self, request):
"""
獲取所有圖書數據:
1. 查詢所有圖書的數據
2. 將圖書的數據進行返回
數據格式:json 狀態碼:200
"""
# 1. 查詢所有圖書的數據
books = BookInfo.objects.all() # QuerySet
# 組織數據
books_li = []
for book in books:
book_dict = {
'id': book.id,
'btitle': book.btitle,
'bpub_date': book.bpub_date,
'bread': book.bread,
'bcomment': book.bcomment,
'image': book.image.url if book.image else ''
}
books_li.append(book_dict)
# 2. 將圖書的數據進行返回
# 注意點:將list轉換爲json數據時,需要將safe設置False
return JsonResponse(books_li, safe=False)
# POST /books/
# 參數:客戶端傳遞 btitle,bpub_date,通過json傳遞
def post(self, request):
"""
新增一本圖書數據:
1. 獲取參數並進行校驗:request.body->decode->json.loads
2. 創建圖書並添加到數據庫
3. 將新增的圖書數據進行返回
數據格式:json 狀態碼:200
"""
pass
class BookDetailView(View):
# GET /books/(?P<pk>\d+)/
def get(self, request, pk):
"""獲取指定的圖書數據(根據id)"""
pass
# PUT /books/(?P<pk>\d+)/
def put(self, request, pk):
"""修改指定的圖書數據(根據id)"""
pass
# DELETE /books/(?P<pk>\d+)/
def delete(self, request, pk):
"""刪除指定的圖書數據(根據id)"""
pass