串行器中的ModelSerializer – Django REST框架
ModelSerializer是在默认的序列化器之上的一个抽象层,可以快速为Django中的模型创建一个序列化器。Django REST框架是对默认Django框架的一个封装,基本上用于创建各种类型的API。在通过REST框架创建API之前有三个阶段,将模型的数据转换为JSON/XML格式(序列化),将这些数据渲染到视图中,创建一个用于映射到视图集的URL。本文围绕Django REST框架的序列化器中的ModelSerializer展开。
ModelSerializer
ModelSerializer类提供了一个快捷方式,让你自动创建一个Serializer类,其字段与Model字段对应。
ModelSerializer类与普通的Serializer类相同,只是。
- 它将根据模型自动为你生成一组字段。
- 它将自动为序列化器生成验证器,例如唯一的验证器。
- 它包括.create()和.update()的简单默认实现。
语法 –
示例 –
默认情况下,类上的所有模型字段将被映射到相应的序列化器字段。
如何使用Django REST框架创建一个ModelSerializer
- 将rest_framework添加到INSTALLED_APPS。
- 创建一个应用程序和模型
- Serialization
- 创建一个视图集
- 定义API的URLs
- 运行服务器并检查API
将rest_framework添加到INSTALLED_APPS
要在你的项目中初始化REST框架,进入settings.py ,在INSTALLED_APPS的底部添加’rest_framework’。
创建一个应用程序和模型
现在,让我们用命令创建一个应用程序。
现在应该已经注册了一个名为apis的文件夹。让我们把这个应用添加到INSTALLED_APPS和urls.py中。
在,settings.py ,
现在,在urls.py中添加apis urls。在geeksforgeeks.urls.py ,
创建一个模型
为了演示,创建和使用一个API,让我们创建一个名为 “GeeksModel “的模型。在apis/models.py中
现在我们的应用程序已经准备好了,让我们把数据序列化,并从这些数据中创建视图。
序列化
序列化器允许复杂的数据,如querysets和模型实例,被转换为本地Python数据类型,然后可以很容易地呈现为JSON、XML或其他内容类型。序列化器还提供了反序列化,允许解析后的数据在首先验证了传入的数据后被转换回复杂类型。让我们开始创建一个序列化器,在文件apis/serializers.py中。
创建一个视图集
为了将数据渲染到前端,并处理来自用户的请求,我们需要创建一个视图。在Django REST框架中,我们称这些为视图集,所以让我们在apis/views.py中创建一个视图。
定义API的URLs
指定要访问的API的URL路径,在apis/urls.py中。
在一切都成功准备好后,让我们运行一些命令来激活服务器。
运行服务器并检查API
运行以下命令来创建数据库,并运行服务器。
现在访问http://127.0.0.1:8000/geeks/ 。
人们可以检查ModelSerializer已经创建了一个具有整体CRUD功能的端点。
高级用法
指定要包括哪些字段。
如果你只想在模型序列化器中使用默认字段的一个子集,你可以使用字段或排除选项来实现,就像你对ModelForm的操作一样。
For example:
或排除 例子 :
明确指定字段
人们可以向ModelSerializer添加额外的字段,或者通过在类上声明字段来覆盖默认字段,就像你对Serializer类一样。
For example,
指定只读字段
人们可能希望指定多个字段为只读。你可以使用快捷的Meta选项read_only_fields,而不是明确地用read_only=True属性添加每个字段。
这个选项应该是一个字段名的列表或元组,其声明方式如下。
要查看更多关于ModelSerializer的信息,请访问ModelSerializer文档
串行器字段中的核心参数
参数 | 说明 |
---|---|
read_only | 将此设置为True,以确保在序列化表示时使用该字段,但在反序列化期间创建或更新实例时不使用该字段。 |
Write_only | 将此设置为True,以确保在更新或创建实例时可以使用该字段,但在序列化表示时不包括在内。 |
required | 将此设置为False也允许在序列化实例时从输出中省略对象属性或字典键。 |
default | 如果设置,这将给出默认值,如果没有提供输入值,将用于该字段。 |
allow_null | 通常情况下,如果None被传递给一个序列化器字段,将会产生一个错误。如果None被认为是一个有效的值,请将这个关键字参数设置为True。 |
source | 将被用于填充字段的属性名称。 |
validators | 一个验证器函数的列表,这些函数应该应用于输入的字段,它们要么引发验证错误,要么简单地返回。 |
error_messages | 一个错误代码的字典,用于错误信息。 |
label | 一个简短的文本字符串,可作为HTML表格字段或其他描述性元素中的字段名称。 |
help_text | 一个文本字符串,可作为HTML表单字段或其他描述性元素的描述。 |
initial | 一个应该用于预先填充HTML表格字段的值。 |