python Django框架中的嵌套序列化器詳解
嵌套序列化器的意義
在許多現(xiàn)實(shí)場(chǎng)景中,數(shù)據(jù)模型表現(xiàn)出彼此之間的關(guān)系。例如,你可能有一個(gè)通過外鍵與類別模型關(guān)聯(lián)的 Book 模型。在這種情況下,僅僅序列化 Book 對(duì)象可能還不夠。你可能希望在序列化輸出中包含相關(guān)的類別信息。這正是嵌套序列化器發(fā)揮作用的地方。
設(shè)置項(xiàng)目
讓我們逐步了解 Django 中嵌套序列化器的實(shí)現(xiàn),以了解它們?cè)趯?shí)踐中的工作原理??紤]這樣一個(gè)場(chǎng)景,我們有兩個(gè)模型:類別和書籍,每本書都屬于一個(gè)類別。我們的目標(biāo)是序列化 Book 對(duì)象及其關(guān)聯(lián)的類別信息。
啟動(dòng)項(xiàng)目
要啟動(dòng)項(xiàng)目,請(qǐng)使用此命令
django-admin startproject core cd core
要啟動(dòng)應(yīng)用程序,請(qǐng)使用此命令
python manage.py startapp home
現(xiàn)在將此應(yīng)用程序和 **“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", ]
文件結(jié)構(gòu)
設(shè)置文件
serializer.py:此 Python 代碼使用 Django REST 框架創(chuàng)建兩個(gè)序列化器:CategorySerializer和BookSerializer。
- CategorySerializer序列化Category模型,僅包括category_name字段。
- BookSerializer 序列化 Book 模型的所有字段。它還包括相關(guān)類別模型的序列化。
- 注釋掉的行#深度= 1表明能夠控制相關(guān)模型序列化的深度,但它當(dāng)前尚未激活。
- 這些序列化器允許將 Django 模型實(shí)例轉(zhuǎn)換為 JSON 數(shù)據(jù),以便在 API 響應(yīng)或請(qǐng)求中使用
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 代碼定義了兩個(gè) Django 模型:
類別模型:表示名稱為category_name 字段的類別。
書籍型號(hào):
- 代表一本書,其標(biāo)題為 book_title 字段。
- 包括與類別模型的外鍵關(guān)系(類別),將每本書連接到一個(gè)類別。
- 使用 on_delete=models.CASCADE確保刪除類別時(shí),其關(guān)聯(lián)的書籍也會(huì)被刪除。
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:首先我們注冊(cè)類別,然后注冊(cè)書籍模型。
from django.contrib import admin from .models import * admin.site.register(Category) admin.site.register(Book)
views.py:導(dǎo)入各種 Django 和 Django REST 框架模塊和類。使用 @api_view裝飾器定義視圖函數(shù)get_book ,指定它處理 HTTP GET 請(qǐng)求。使用 Book.objects從數(shù)據(jù)庫(kù)檢索所有 Book 對(duì)象。檢索到的 Book 對(duì)象使用BookSerializer 進(jìn)行序列化。返回 JSON 響應(yīng),狀態(tài)代碼為 200,序列化的圖書數(shù)據(jù)作為負(fù)載。
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:這是我們項(xiàng)目文件夾的 urls.py 文件,在這個(gè) urls.py 文件中,我們首先導(dǎo)入所有重要的庫(kù),然后使用 include 函數(shù)將應(yīng)用程序與項(xiàng)目映射。
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: 在應(yīng)用程序的 urls.py 文件中,我們導(dǎo)入 admin 并導(dǎo)入路徑和 include 方法,并導(dǎo)入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), ]
項(xiàng)目部署
運(yùn)行以下命令來應(yīng)用遷移:
python3 manage.py makemigrations python3 manage.py migrate
借助以下命令運(yùn)行服務(wù)器:
python3 manage.py runserver
總結(jié)
總之,Django 中的嵌套序列化器為處理 API 開發(fā)中的復(fù)雜數(shù)據(jù)關(guān)系提供了強(qiáng)大的機(jī)制。通過將相關(guān)模型序列化器合并到主序列化器中,開發(fā)人員可以有效地序列化和反序列化數(shù)據(jù)層次結(jié)構(gòu),從而提供結(jié)構(gòu)化且信息豐富的 API 響應(yīng)。無論是處理父子關(guān)系、深度依賴關(guān)系還是多級(jí)數(shù)據(jù)結(jié)構(gòu),嵌套序列化程序都增強(qiáng)了 Django 支持的 API 的靈活性和可用性,使其成為創(chuàng)建豐富且高效的 Web 應(yīng)用程序的寶貴工具。
以上就是python Django框架中的嵌套序列化器詳解的詳細(xì)內(nèi)容,更多關(guān)于python Django嵌套序列化器的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
pandas.DataFrame的pivot()和unstack()實(shí)現(xiàn)行轉(zhuǎn)列
這篇文章主要介紹了pandas.DataFrame的pivot()和unstack()實(shí)現(xiàn)行轉(zhuǎn)列,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-07-07python time.sleep()是睡眠線程還是進(jìn)程
這篇文章主要介紹了python time.sleep()是睡眠線程還是進(jìn)程,通過實(shí)例代碼給大家介紹了Python Sleep休眠函數(shù) ,需要的朋友可以參考下2019-07-07python基于socket函數(shù)實(shí)現(xiàn)端口掃描
這篇文章主要為大家詳細(xì)介紹了python基于socket函數(shù)實(shí)現(xiàn)端口掃描,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05Python實(shí)現(xiàn)簡(jiǎn)單的學(xué)生信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)簡(jiǎn)單的學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03Pycharm中python調(diào)用另一個(gè)文件類或者函數(shù)
本文主要介紹了Pycharm中python調(diào)用另一個(gè)文件類或者函數(shù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07python遞歸函數(shù)求n的階乘,優(yōu)缺點(diǎn)及遞歸次數(shù)設(shè)置方式
這篇文章主要介紹了python遞歸函數(shù)求n的階乘,優(yōu)缺點(diǎn)及遞歸次數(shù)設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04使用python加密主機(jī)文件幾種方法實(shí)現(xiàn)
本文主要介紹了使用python加密主機(jī)文件幾種方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02python逐像素獲取柵格經(jīng)緯度分別保存在兩個(gè)矩陣中(代碼收藏)
這篇文章主要介紹了python逐像素獲取柵格經(jīng)緯度分別保存在兩個(gè)矩陣中的實(shí)現(xiàn)示例,建議收藏代碼總會(huì)用到,有需要的朋友可以借鑒參考下,希望能夠有所幫助2024-01-01