06.DRF-第一個demo
- 2020 年 6 月 19 日
- 筆記
- django, Django REST framework, Python, restful
一、環境安裝與配置
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)
1.1 安裝DRF
pip install djangorestframework
1.2 添加rest_framework應用
我們利用在Django框架學習中創建的demo工程,在settings.py的INSTALLED_APPS中添加’rest_framework’。
INSTALLED_APPS = [
...
'rest_framework',
]
接下來就可以使用DRF進行開發了。
二、見識DRF的魅力
我們仍以在學習Django框架時使用的圖書英雄為案例,使用Django REST framework快速實現圖書的REST API。
2.1 創建序列化器
在booktest應用中新建serializers.py用於保存該應用的序列化器。
創建一個BookInfoSerializer用於序列化與反序列化。
class BookInfoSerializer(serializers.ModelSerializer):
"""圖書數據序列化器"""
class Meta:
model = BookInfo
fields = '__all__'
- model 指明該序列化器處理的數據欄位從模型類BookInfo參考生成
- fields 指明該序列化器包含模型類中的哪些欄位,’all‘指明包含所有欄位
2.2 編寫視圖
在booktest應用的views.py中創建視圖BookInfoViewSet,這是一個視圖集合。
from rest_framework.viewsets import ModelViewSet
from .serializers import BookInfoSerializer
from .models import BookInfo
class BookInfoViewSet(ModelViewSet):
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializer
- queryset 指明該視圖集在查詢數據時使用的查詢集
- serializer_class 指明該視圖在進行序列化或反序列化時使用的序列化器
2.3 定義路由
在booktest應用的urls.py中定義路由資訊。
from . import views
from rest_framework.routers import DefaultRouter
urlpatterns = [
...
]
router = DefaultRouter() # 可以處理視圖的路由器
router.register(r'books', views.BookInfoViewSet) # 向路由器中註冊視圖集
urlpatterns += router.urls # 將路由器中的所以路由資訊追到到django的路由列表中
2.4 運行測試
運行當前程式(與運行Django一樣)
python manage.py runserver
在瀏覽器中輸入網址127.0.0.1:8000,可以看到DRF提供的API Web瀏覽頁面:
1)點擊鏈接127.0.0.1:8000/books/ 可以訪問獲取所有數據的介面,呈現如下頁面:
2)在頁面底下表單部分填寫圖書資訊,可以訪問添加新圖書的介面,保存新書:
點擊POST後,返回如下頁面資訊:
3)在瀏覽器中輸入網址127.0.0.1:8000/books/1/,可以訪問獲取單一圖書資訊的介面(id為1的圖書),呈現如下頁面:
4)在頁面底部表單中填寫圖書資訊,可以訪問修改圖書的介面:
點擊PUT,返回如下頁面資訊:
5)點擊DELETE按鈕,可以訪問刪除圖書的介面:
返回,如下頁面:
至此,是不是發現Django REST framework很好用!