python 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 框架创建两个序列化器:CategorySerializer和BookSerializer。
- CategorySerializer序列化Category模型,仅包括category_name字段。
- BookSerializer 序列化 Book 模型的所有字段。它还包括相关类别模型的序列化。
- 注释掉的行#深度= 1表明能够控制相关模型序列化的深度,但它当前尚未激活。
- 这些序列化器允许将 Django 模型实例转换为 JSON 数据,以便在 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确保删除类别时,其关联的书籍也会被删除。
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嵌套序列化器的资料请关注脚本之家其它相关文章!