Django REST framework 中序列化器的作用和用法

阅读时长 7 分钟读完

什么是序列化器?

序列化器是 Django REST framework (以下简称 DRF)中的一个重要组件,它可以将 Python 对象序列化成 JSON 或其他格式的数据,也可以将这些数据反序列化为 Python 对象。通俗地说,序列化器就像是一个翻译,可以将 Django 模型对象翻译成可以传递给前端的数据格式,也可以将前端传递过来的数据翻译成 Django 模型对象。

在 DRF 中,序列化器是用来定义 API 中响应数据格式的一个重要工具。序列化器可以非常方便地转换数据格式,支持自定义字段,嵌套序列化等高级功能。

序列化器有什么用?

序列化器的主要作用如下:

  • 将 Django 模型对象转换为 JSON 等数据格式,以便于传递给前端;
  • 将前端传递过来的数据转换为 Django 模型对象,以便于存储到数据库中;
  • 在数据传递过程中,可以方便的控制数据格式,支持自定义字段,嵌套序列化等高级功能;
  • 序列化器的验证功能可以保证数据的完整性和正确性。

序列化器的使用

安装 Django REST framework

首先,需要在 Django 项目中安装 DRF。可以通过以下命令进行安装:

创建序列化器

创建序列化器需要定义一个继承自 serializers.Serializerserializers.ModelSerializer 的类,并在其中定义需要序列化或反序列化的字段。以下是一个简单的序列化器示例:

在上面的示例中,UserSerializer 继承自 serializers.Serializer,并分别定义了三个需要序列化或反序列化的字段:idusernameemail

序列化数据

创建了序列化器之后,就可以将 Django 模型对象序列化为 JSON 等格式。以下是一个简单的视图函数示例:

-- -------------------- ---- -------
---- ----------------------- ------ --------
---- ------------------------- ------ --------
---- ------- ------ ----
---- ------------ ------ --------------

------------------
--- -------------------
    ----- - ------------------
    ---------- - --------------------- ----------
    ------ -------------------------

在上面的示例中,使用 User.objects.all() 获取所有用户对象,然后实例化 UserSerializer 对象,将用户数据序列化为 JSON 格式。最后返回序列化后的数据。

反序列化数据

除了序列化数据外,序列化器还可以将前端传递过来的数据反序列化为 Django 模型对象,以便于存储到数据库中。以下是一个简单的视图函数示例:

-- -------------------- ---- -------
---- ------------------------- ------ --------
---- ----------------------- ------ --------
---- ------------ ------ --------------

-------------------
--- ---------------------
    ---------- - ---------------------------------
    -- ----------------------
        -----------------
        ------ ----------------------------------- -----------
    ------ --------------------------- -----------

在上面的示例中,从请求中获取前端传递过来的数据,并实例化 UserSerializer 对象。如果数据合法,则调用 serializer.save() 方法将数据存储到数据库中,并返回序列化后的数据及状态码 201(表示创建成功)。否则,返回错误信息及状态码 400(表示请求有误)。

序列化器的高级应用

自定义字段

除了默认的数据字段之外,序列化器还可以自定义字段。以下是一个简单的示例:

-- -------------------- ---- -------
----- ---------------------------------------
    -- - -------------------------------------
    -------- - -------------------------------------
    ----- - ------------------------

    --------- - -----------------------------------

    --- ------------------- -----
        ------ ------------------ ----------------

在上面的示例中,定义了一个名为 full_name 的自定义字段,该字段的值为模型对象的 first_namelast_name 拼接而成的字符串。要定义此类自定义字段,需要实现一个名为 get_{field_name} 的方法(在本例中为 get_full_name),并将该方法名用作 SerializerMethodField() 的参数。

嵌套序列化

序列化器还支持嵌套序列化功能,可以将一个对象的某些属性序列化为一个新的 JSON 对象。以下是一个简单的示例:

在上面的示例中,CommentSerializer 中的 author 属性被设置为 UserSerializer() 的实例,因此在序列化 Comment 对象时,author 属性的值将被转换为一个嵌套的 JSON 对象。

序列化器的验证

除了可以进行序列化和反序列化操作之外,序列化器还可以用来验证数据。以下是一个示例:

-- -------------------- ---- -------
----- --------------------------------------------
    ----- - ------------------------
    -------- - --------------------------------------

    --- ----------------------- -------
        -- ---------- - --
            ----- ------------------------------------- ---- -- -- ----- - ------------
        ------ -----

    ----- -----
        ----- - ----
        ------ - ------ ----------- -------- -----------

在上面的示例中,定义了一个自定义验证函数 validate_password(),用于检查 password 字段是否满足条件。如果验证失败,将引发一个 serializers.ValidationError 异常,并返回相应的错误消息。

总结

序列化器是 Django REST framework 中非常重要的组件之一,它可以将 Django 模型对象序列化为 JSON 等格式,也可以将前端传递过来的数据反序列化为 Django 模型对象。使用序列化器能够快速高效地开发 RESTful API,并且支持自定义字段,嵌套序列化等非常实用的功能。对于前端开发者而言,熟练使用序列化器能够大大提高开发效率并降低出错的风险。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64ad258f48841e989494e37d

纠错
反馈