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 frameworkpip 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做了路由的註冊