1. 程式人生 > 實用技巧 >Django學習筆記:第十三天 Rest Framework【1】

Django學習筆記:第十三天 Rest Framework【1】

Django Rest Framework

-- 是一個強大且靈活的工具包,用以構建Web API

-- 可以在Django的基礎上迅速實現API

-- 並且自身還帶有WEB的測試頁面,可以方便的測試自己的API

傳統的基於模板引擎的 django 開發工作流:

-- 繫結 URL 和檢視函式。當用戶訪問某個 URL 時,呼叫繫結的檢視函式進行處理。

-- 編寫檢視函式的邏輯。檢視中通常涉及資料庫的操作。

-- 在檢視中渲染 HTML 模板,返回 HTTP 響應。

基於 django-rest-framework 的 RESTful API 的開發,過程是完全類似的:

-- 繫結 URL 和檢視函式。當用戶訪問某個 URL 時,呼叫繫結的檢視函式進行處理。

-- 編寫檢視函式的邏輯,根據 HTTP 請求型別,對請求的資源進行相應操作,這個過程通常涉及資料庫的操作。

-- 使用約定的資源描述格式(例如 XML 或者 JSON)序列化資源並將資料返回給客戶端(通過 HTTP 響應)。

Rest Framework開發流程

serializers.py => views.py => urls.py

https://www.django-rest-framework.org/

# 建立 REST 應用,urls => setting
python manage.py startapp REST

# 安裝 rest framework
pip install djangorestframework # setting中新增 rest_framework

序列化器 - Serializer

serializers.py

# 序列化器
from django.contrib.auth.models import User, Group
from rest_framework import serializers
from REST.models import Book


# HyperLinkedModelSerializer,超連結視覺化
class UserSerializer(serializers.HyperlinkedModelSerializer):

    
class Meta: # 模型 + 模板(序列化器) => Json # django內建的User model = User # 欄位 fields = ('url', 'username', 'email', 'groups') class GroupSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Group fields = ('url', 'name') class BookSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Book fields = ('b_name', 'b_price')

檢視函式

-- viewsets.ModelViewSet

-- CBV

-- 檢視集合

from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from REST.models import Book
from REST.serializers import UserSerializer, GroupSerializer, BookSerializer


# 類檢視
class UserViewSet(viewsets.ModelViewSet):
    # 將資料序列化,獲取資料 - 選擇序列化類
    # 查詢結果集
    queryset = User.objects.all()
    # 序列化器選擇
    serializer_class = UserSerializer


class GroupViewSet(viewsets.ModelViewSet):

    queryset = Group.objects.all()

    serializer_class = GroupSerializer


class BookViewSet(viewsets.ModelViewSet):

    queryset = Book.objects.all()

    serializer_class = BookSerializer

根路由 urls.py

from django.contrib import admin
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from REST.views import UserViewSet, GroupViewSet, BookViewSet

router = DefaultRouter()

router.register(r'users', UserViewSet)
router.register(r'groups', GroupViewSet)
router.register(r'books', BookViewSet)


urlpatterns = [
    path('admin/', admin.site.urls),
    path('cbv/', include('App.urls', namespace='cbv')),

    # 需要在include中新增應用名'REST',namespace='rest'會導致重名報錯
    # path('rest/', include(router.urls, 'REST'), namespace='rest'),
    path('rest/', include(router.urls)),

    path('ser/', include('RESTSerializer.urls')),
]

models.py

from django.db import models


# 模型寫好後,在serializers中序列化,再到views,最後註冊路由
class Book(models.Model):

    b_name = models.CharField(max_length=32)
    b_price = models.FloatField(default=1)

進行 runserver

-- 所有Api變成視覺化

-- 超連結視覺化 HyperLinkedModelSerializer

-- 對資料集合實現了整體新增獲取

  -- 路由 /users/, /groups/

  -- get

  -- post

-- 對單個實現了增刪改查

  -- 路由 /users/id/, /groups/id/

  -- get

  -- post

  -- put

  -- delelte

  -- patch

-- viewsets做了檢視函式的實現

-- router做了路由的註冊