Django Rest框架(DRF)中的Modelialializer
#网络开发人员 #编程 #python #django

在django中,模型级别器是由Django Rest框架(DRF)提供的强大功能,它简化了沿JSON格式的Django模型实例序列化和进行序列化的过程。它会自动生成用于Django模型的串行器类,从而减少处理序列化和避难所所需的样板代码的数量。

Modelialializer从DRF提供的串行器类继承,专门设计用于使用Django模型。它为大多数序列化和次要化操作提供了默认实现,从而易于使用复杂的模型。

要使用Modelialializer,您需要为要通过API展示的每个DJANGO模型定义一个序列化类别。串行器类通常在应用程序中的serializers.py文件中定义。

# models.py
from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField()

class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    published_date = models.DateField()
    is_published = models.BooleanField(default=False)

现在,让我们为Book模型创建一个模特器:

# serializers.py
from rest_framework import serializers
from .models import Book

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = '__all__'

在上面的代码中,我们有一个带有三个字段(titleauthorpublished_date)的Book模型。 BookSerializer是一个模型级化合物,可映射到Book模型,并包含序列化中的所有字段。

现在,让我们探索Modelializer的Meta类中的字段和选项:

  1. model

    • 指定与串行器关联的Django模型。
  2. fields

    • 使用fields将模型的特定字段包括在序列化器中。
    • fields的特殊值:
      • '__all__':包括序列化器中模型的所有字段。
      • ['field1', 'field2', ...]:仅包含序列化器中模型的指定字段。
      • ('field1', 'field2', ...):与列表格式相同,仅包括模型中的指定字段。
      • []:排除模型中的所有字段。您可以手动在串行器中包含特定字段。
  3. exclude

    • 使用exclude指定应从序列化器中排除的字段。
# Example with 'fields' and 'exclude':
class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = ['title', 'published_date']
        # exclude = ['is_published']
  1. 冷17:
    • 使用read_only_fields来指定当避免数据时应读取的字段。这些字段不包含在更新或创建操作中。
# Example with 'read_only_fields':
class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = '__all__'
        read_only_fields = ['is_published']
  1. extra_kwargs
    • 使用extra_kwargs为特定字段(例如自定义验证,格式化等)提供额外的选项。
# Example with 'extra_kwargs':
class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = '__all__'
        extra_kwargs = {
            'title': {'required': True},  # Field-level validation
            'published_date': {'format': '%Y-%m-%d'}  # Custom date format
        }

使用ModeleRializer,您可以有效地将复杂的DJANGO模型序列化并进行序列化,并轻松与API视图进行交互。它可以使您免于编写重复序列化和反序列化代码,从而使Django REST API的开发更快,更方便。