From 71209fe8a0bf2526c31a6e4b69e0280e43f6bb9a Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Tue, 8 Dec 2020 22:09:47 +0800 Subject: [PATCH 1/2] PRF @MjSeven --- ...zers in the Django Python web framework.md | 42 ++++++++++--------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/translated/tech/20201116 How to use Serializers in the Django Python web framework.md b/translated/tech/20201116 How to use Serializers in the Django Python web framework.md index c6c7d448af..41a5297f9b 100644 --- a/translated/tech/20201116 How to use Serializers in the Django Python web framework.md +++ b/translated/tech/20201116 How to use Serializers in the Django Python web framework.md @@ -1,6 +1,6 @@ [#]: collector: (lujun9972) [#]: translator: (MjSeven) -[#]: reviewer: ( ) +[#]: reviewer: (wxy) [#]: publisher: ( ) [#]: url: ( ) [#]: subject: (How to use Serializers in the Django Python web framework) @@ -9,12 +9,14 @@ 如何在 Python Web 框架 Django 中使用序列化器 ====== -序列化将数据转换为方便存储或传输的格式,然后将其重构以供使用。DRF 具有最知名的序列化器。 -![Net catching 1s and 0s or data in the clouds][1] -序列化是将数据转换为可以存储或传输的格式,然后对其进行重构的过程。在开发应用程序或将数据存储在数据库、内存或将其转换为文件时,一直会用到它。 +> 序列化用于将数据转换为方便存储或传输的格式,然后将其重新构建以供使用。DRF 是最具有知名的序列化器。 -我最近帮助 [Labcodes][2] 的两名初级开发人员理解序列化器,同时我认为与 Opensource.com 的读者分享我的方法会更好。 +![](https://img.linux.net.cn/data/attachment/album/202012/08/220845q5tz7cfftze5oem5.jpg) + +序列化是将数据转换为可以存储或传输的格式,然后对其进行重新构建的过程。在开发应用程序或将数据存储在数据库、内存或将其转换为文件时,一直会用到它。 + +我最近帮助 [Labcodes][2] 的两名初级开发人员理解序列化器,我想也可以与诸位读者分享一下我的方法。 假设你正在编写一个电子商务网站,你有一个订单,该订单记录了某人在某个日期以某种价格购买了一个产品: @@ -39,7 +41,7 @@ def serialize_order(order):     } ``` -如果你想从数据库中获取一些数据,你可以获取字典数据并将其转换为订单对象: +如果你想从数据库中获取一些数据,你可以获取字典数据并将其转换为订单对象(`Order`): ``` def deserialize_order(order_data): @@ -53,7 +55,7 @@ def deserialize_order(order_data): 这对于简单的数据非常直接了当,但是当你需要处理一些由复杂属性构成的复杂对象时,这种方法就无法很好地扩展。你还需要处理不同类型字段的验证,这需要手工完成大量工作。 -此时序列化框架可以很方便的派上用场。它们使你可以创建带有少量模板的序列化器,这将适用于复杂的情况。 +此时框架的序列化可以很方便的派上用场。它们使你可以创建带有少量模板的序列化器,这将适用于复杂的情况。 [Django][3] 提供了一个序列化模块,允许你将模型“转换”为其它格式: @@ -63,7 +65,7 @@ from django.core import serializers serializers.serialize('json', Order.objects.all()) ``` -它涵盖了 Web 应用程序最常用的种类,例如 JSON、YAML 和 XML。但是你也可以使用第三方序列化器或创建自己的序列化器。你只需要在 settings.py 文件中注册它: +它涵盖了 Web 应用程序最常用的种类,例如 JSON、YAML 和 XML。但是你也可以使用第三方序列化器或创建自己的序列化器。你只需要在 `settings.py` 文件中注册它: ``` # settings.py @@ -72,7 +74,7 @@ SERIALIZATION_MODULES = { } ``` -要创建自己的 `MyFormatSerializer`,你需要实现 `.serialize()` 方法并接受一个 queryset 和其它选项作为参数: +要创建自己的 `MyFormatSerializer`,你需要实现 `.serialize()` 方法并接受一个查询集和其它选项作为参数: ``` class MyFormatSerializer: @@ -88,7 +90,7 @@ from django.core import serializers serializers.serialize('my_format', Order.objects.all()) ``` -你可以使用 options 参数来定义序列化程序的行为。例如,如果要定义在处理 `ForeignKeys` 时要使用嵌套序列化,或者只希望数据返回其主键,你可以传递一个 `flat=True` 参数作为选项,并在方法中处理: +你可以使用选项参数来定义序列化程序的行为。例如,如果要定义在处理 `ForeignKeys` 时要使用嵌套序列化,或者只希望数据返回其主键,你可以传递一个 `flat=True` 参数作为选项,并在方法中处理: ``` class MyFormatSerializer: @@ -100,9 +102,9 @@ class MyFormatSerializer: 使用 Django 序列化的一种方法是使用 `loaddata` 和 `dumpdata` 管理命令。 -### DRF 序列化 +### DRF 序列化器 -在 Django 社区中,[Django REST framework][4](DRF) 提供了最著名的序列化器。尽管你可以使用 Django 的序列化器来构建将在 API 中响应的 JSON,但 REST 框架中的序列化器提供了更出色的功能,可以帮助你处理并轻松验证复杂的数据。 +在 Django 社区中,[Django REST 框架][4](DRF)提供了最著名的序列化器。尽管你可以使用 Django 的序列化器来构建将在 API 中响应的 JSON,但 REST 框架中的序列化器提供了更出色的功能,可以帮助你处理并轻松验证复杂的数据。 在订单的例子中,你可以像这样创建一个序列化器: @@ -126,7 +128,7 @@ serializer.data # {'product': 'pen', 'customer': 'renato', 'price': '10.50', 'date': '2020-08-16'} ``` -为了能够从数据返回实例,你需要实现两个方法:create 和 update: +为了能够从数据返回实例,你需要实现两个方法:`create` 和 `update`: ``` from rest_framework import serializers @@ -155,9 +157,9 @@ serializer.is_valid() serializer.save() ``` -### Model 序列化 +### 模型序列化器 -序列化数据时,通常需要从数据库进行数据处理,即你创建的模型。ModelSerializer 与 ModelForm 一样,提供了一个 API,用于从模型创建序列化器。假设你有一个订单模型: +序列化数据时,通常需要从数据库(即你创建的模型)进行数据处理。`ModelSerializer` 与 `ModelForm` 一样,提供了一个 API,用于从模型创建序列化器。假设你有一个订单模型: ``` from django.db import models @@ -182,9 +184,9 @@ class OrderSerializer(serializers.ModelSerializer): Django 会自动在序列化器中包含所有模型字段,并创建 `create` 和 `udpate` 方法。 -### 在基于类的视图中使用序列化器 (CBVs) +### 在基于类的视图(CBV)中使用序列化器 -像 Django CBV 中的表单一样,序列化器可以很好地与 DRF 集成。你可以设置 `serializer_class` 属性,方便序列化器用于视图: +像 Django CBV 中的 `Forms` 一样,序列化器可以很好地与 DRF 集成。你可以设置 `serializer_class` 属性,方便序列化器用于视图: ``` from rest_framework import generics @@ -208,11 +210,11 @@ class OrderListCreateAPIView(generics.ListCreateAPIView):         return OrderSerializer ``` -在 CBV 中还有其它与序列化器交互的方法。例如,[get_serializer()][5] 返回一个已经实例化的序列化器,[get_serializer_context()][6] 返回创建实例时传递给序列化器的参数。对于创建或更新数据的视图,有 `create` 和 `update`,它们使用 `is_valid` 方法验证数据,还有 [perform_create][7] 和 [perform_update][8] 调用序列化的 `save` 方法。 +在 CBV 中还有其它与序列化器交互的方法。例如,[get_serializer()][5] 返回一个已经实例化的序列化器,[get_serializer_context()][6] 返回创建实例时传递给序列化器的参数。对于创建或更新数据的视图,有 `create` 和 `update`,它们使用 `is_valid` 方法验证数据,还有 [perform_create][7] 和 [perform_update][8] 调用序列化器的 `save` 方法。 ### 了解更多 -要了解更多资源,参考我朋友 André Ericson 的[经典 Django REST Framework][9] 网站。它是一个[基于类的经典视图][10]的 REST Framework 版本,可让你深入查看组成 DRF 的类。当然,官方[文档][11]也是一个很棒的资源。 +要了解更多资源,参考我朋友 André Ericson 的[经典 Django REST 框架][9]网站。它是一个[基于类的经典视图][10]的 REST 框架版本,可让你深入查看组成 DRF 的类。当然,官方[文档][11]也是一个很棒的资源。 -------------------------------------------------------------------------------- @@ -221,7 +223,7 @@ via: https://opensource.com/article/20/11/django-rest-framework-serializers 作者:[Renato Oliveira][a] 选题:[lujun9972][b] 译者:[MjSeven](https://github.com/MjSeven) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 From 61bd722932db56defb3b14bd705a8c4ed0a73d4d Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Tue, 8 Dec 2020 22:10:48 +0800 Subject: [PATCH 2/2] PUB @MjSeven https://linux.cn/article-12900-1.html --- ...w to use Serializers in the Django Python web framework.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename {translated/tech => published}/20201116 How to use Serializers in the Django Python web framework.md (99%) diff --git a/translated/tech/20201116 How to use Serializers in the Django Python web framework.md b/published/20201116 How to use Serializers in the Django Python web framework.md similarity index 99% rename from translated/tech/20201116 How to use Serializers in the Django Python web framework.md rename to published/20201116 How to use Serializers in the Django Python web framework.md index 41a5297f9b..f3f83f18a1 100644 --- a/translated/tech/20201116 How to use Serializers in the Django Python web framework.md +++ b/published/20201116 How to use Serializers in the Django Python web framework.md @@ -1,8 +1,8 @@ [#]: collector: (lujun9972) [#]: translator: (MjSeven) [#]: reviewer: (wxy) -[#]: publisher: ( ) -[#]: url: ( ) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-12900-1.html) [#]: subject: (How to use Serializers in the Django Python web framework) [#]: via: (https://opensource.com/article/20/11/django-rest-framework-serializers) [#]: author: (Renato Oliveira https://opensource.com/users/renato-oliveira)