python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python Django嵌套序列化器

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

作者:鲸落_

在Web开发领域,创建和使用API(应用程序编程接口)是很常见的,Django Rest Framework(DRF)是一个强大的工具包,在DRF中,一个关键概念是序列化器,在本文中,我们将深入研究Django中嵌套序列化器的概念以及它们如何促进复杂数据关系的处理,需要的朋友可以参考下

嵌套序列化器的意义

在许多现实场景中,数据模型表现出彼此之间的关系。例如,你可能有一个通过外键与类别模型关联的 Book 模型。在这种情况下,仅仅序列化 Book 对象可能还不够。你可能希望在序列化输出中包含相关的类别信息。这正是嵌套序列化器发挥作用的地方。

设置项目

让我们逐步了解 Django 中嵌套序列化器的实现,以了解它们在实践中的工作原理。考虑这样一个场景,我们有两个模型:类别和书籍,每本书都属于一个类别。我们的目标是序列化 Book 对象及其关联的类别信息。

启动项目

要启动项目,请使用此命令

django-admin startproject core
cd core

要启动应用程序,请使用此命令

python manage.py startapp home

现在将此应用程序和 **“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 框架创建两个序列化器:CategorySerializerBookSerializer

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 模型:

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装饰器定义视图函数get_book ,指定它处理 HTTP GET 请求。使用 Book.objects从数据库检索所有 Book 对象。检索到的 Book 对象使用BookSerializer 进行序列化。返回 JSON 响应,状态代码为 200,序列化的图书数据作为负载。

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 函数将应用程序与项目映射。

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 文件的所有功能然后我们创建执行嵌套序列化操作的路径

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 开发中的复杂数据关系提供了强大的机制。通过将相关模型序列化器合并到主序列化器中,开发人员可以有效地序列化和反序列化数据层次结构,从而提供结构化且信息丰富的 API 响应。无论是处理父子关系、深度依赖关系还是多级数据结构,嵌套序列化程序都增强了 Django 支持的 API 的灵活性和可用性,使其成为创建丰富且高效的 Web 应用程序的宝贵工具。

以上就是python Django框架中的嵌套序列化器详解的详细内容,更多关于python Django嵌套序列化器的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文