亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python Django框架中的嵌套序列化器詳解

 更新時間:2023年10月27日 08:58:52   作者:鯨落_  
在Web開發(fā)領域,創(chuàng)建和使用API(應用程序編程接口)是很常見的,Django Rest Framework(DRF)是一個強大的工具包,在DRF中,一個關鍵概念是序列化器,在本文中,我們將深入研究Django中嵌套序列化器的概念以及它們?nèi)绾未龠M復雜數(shù)據(jù)關系的處理,需要的朋友可以參考下

嵌套序列化器的意義

在許多現(xiàn)實場景中,數(shù)據(jù)模型表現(xiàn)出彼此之間的關系。例如,你可能有一個通過外鍵與類別模型關聯(lián)的 Book 模型。在這種情況下,僅僅序列化 Book 對象可能還不夠。你可能希望在序列化輸出中包含相關的類別信息。這正是嵌套序列化器發(fā)揮作用的地方。

設置項目

讓我們逐步了解 Django 中嵌套序列化器的實現(xiàn),以了解它們在實踐中的工作原理??紤]這樣一個場景,我們有兩個模型:類別和書籍,每本書都屬于一個類別。我們的目標是序列化 Book 對象及其關聯(lián)的類別信息。

啟動項目

要啟動項目,請使用此命令

django-admin startproject core
cd core

要啟動應用程序,請使用此命令

python manage.py startapp home

現(xiàn)在將此應用程序和 **“rest_framework” **添加到 “settings.py”

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "rest_framework",
    "home",
    "rest_framework.authtoken",
    
]

文件結構

設置文件

serializer.py:此 Python 代碼使用 Django REST 框架創(chuàng)建兩個序列化器:CategorySerializerBookSerializer。

  • CategorySerializer序列化Category模型,僅包括category_name字段。
  • BookSerializer 序列化 Book 模型的所有字段。它還包括相關類別模型的序列化。
  • 注釋掉的行#深度= 1表明能夠控制相關模型序列化的深度,但它當前尚未激活。
  • 這些序列化器允許將 Django 模型實例轉換為 JSON 數(shù)據(jù),以便在 API 響應或請求中使用
from rest_framework import serializers
from .models import *
from django.contrib.auth.models import User 
class CategorySerializer(serializers.ModelSerializer):
	class Meta:
		model = Category 
		fields = ['category_name',] 
class BookSerializer(serializers.ModelSerializer
	category = CategorySerializer() 
	
	class Meta:
		model = Book 
		fields = '__all__'
		depth =1

models.py:此 Python 代碼定義了兩個 Django 模型:

  • 類別模型:表示名稱為category_name 字段的類別。

  • 書籍型號:

    • 代表一本書,其標題為 book_title 字段。
    • 包括與類別模型的外鍵關系(類別),將每本書連接到一個類別。
    • 使用 on_delete=models.CASCADE確保刪除類別時,其關聯(lián)的書籍也會被刪除。
from django.db import models

class Category(models.Model):
	category_name = models.CharField(max_length=100)

class Book(models.Model):
	category = models.ForeignKey(Category, on_delete=models.CASCADE)
	book_title = models.CharField(max_length=100)

admin.py:首先我們注冊類別,然后注冊書籍模型。

from django.contrib import admin
from .models import *
admin.site.register(Category)
admin.site.register(Book)

views.py:導入各種 Django 和 Django REST 框架模塊和類。使用 @api_view裝飾器定義視圖函數(shù)get_book ,指定它處理 HTTP GET 請求。使用 Book.objects從數(shù)據(jù)庫檢索所有 Book 對象。檢索到的 Book 對象使用BookSerializer 進行序列化。返回 JSON 響應,狀態(tài)代碼為 200,序列化的圖書數(shù)據(jù)作為負載。

from django.shortcuts import render
from rest_framework.decorators import api_view
from rest_framework.response import Response
from .models import *
from .serializers import *
from rest_framework.views import APIView
from rest_framework.authtoken.models import Token
@api_view(['GET'])
def get_book(request):
	book_objs = Book.objects.all()
	serializer = BookSerializer(book_objs, many=True)
	return Response({'status': 200, 'payload': serializer.data})

core/urls.py:這是我們項目文件夾的 urls.py 文件,在這個 urls.py 文件中,我們首先導入所有重要的庫,然后使用 include 函數(shù)將應用程序與項目映射。

from django.contrib import admin
from django.urls import path, include
from rest_framework.authtoken import views

urlpatterns = [
	path('', include('home.urls')),
	path("admin/", admin.site.urls),

]

app/urls.py: 在應用程序的 urls.py 文件中,我們導入 admin 并導入路徑和 include 方法,并導入views.py 文件的所有功能然后我們創(chuàng)建執(zhí)行嵌套序列化操作的路徑

from django.contrib import admin
from django.urls import path, include
from .views import *


urlpatterns = [
path('get-book/', get_book),

]

項目部署

運行以下命令來應用遷移:

python3 manage.py makemigrations
python3 manage.py migrate

借助以下命令運行服務器:

python3 manage.py runserver

總結

總之,Django 中的嵌套序列化器為處理 API 開發(fā)中的復雜數(shù)據(jù)關系提供了強大的機制。通過將相關模型序列化器合并到主序列化器中,開發(fā)人員可以有效地序列化和反序列化數(shù)據(jù)層次結構,從而提供結構化且信息豐富的 API 響應。無論是處理父子關系、深度依賴關系還是多級數(shù)據(jù)結構,嵌套序列化程序都增強了 Django 支持的 API 的靈活性和可用性,使其成為創(chuàng)建豐富且高效的 Web 應用程序的寶貴工具。

以上就是python Django框架中的嵌套序列化器詳解的詳細內(nèi)容,更多關于python Django嵌套序列化器的資料請關注腳本之家其它相關文章!

相關文章

最新評論