串行器中的JSONField – Django REST框架

串行器中的JSONField – Django REST框架

Django REST框架中,序列化的概念是将数据库数据转换为可被javascript使用的数据类型。每个序列化器都有一些将要被处理的字段(条目)。例如,如果你有一个名为Employee的类,其字段为Employee_id, Employee_name, is_admin等。那么,你就需要AutoField、CharField和BooleanField来通过Django存储和操作数据。同样,序列化器的工作原理也是一样的,也有用于创建序列化器的字段。本文围绕Django REST框架中序列器的JSONField展开。

JSONField

JSONField基本上是一个字段类,它验证传入的数据结构是否由有效的JSON基元组成。在其备用的二进制模式下,它将表示并验证JSON编码的二进制字符串。它有以下参数 –

  • binary – 如果设置为True,那么该字段将输出并验证一个JSON编码的字符串,而不是一个原始数据结构。默认为False。
  • encoder – 使用这个JSON编码器来序列化输入对象。默认为无。

语法 –

field_name = serializers.JSONField(*args, **kwargs)

如何在序列化程序中使用JSONField

为了解释JSONField的用法,让我们使用相同的项目设置–如何使用Django Rest框架创建一个基本的API?现在你的项目中有一个名为serializers的文件,让我们创建一个以JSONField为字段的serializer。

# import serializer from rest_framework
from rest_framework import serializers
 
class Geeks(object):
    def __init__(self, json_data):
        self.json_data = json_data
 
# create a serializer
class GeeksSerializer(serializers.Serializer):
    # initialize fields
    json_data = serializers.JSONField()
    

现在让我们创建一些对象,并尝试将它们序列化,检查它们是否真的能工作,运行,-

Python manage.py shell

现在,在shell中运行以下python命令

# create a json object
>>> import json
>>> x = json.dumps({"name":"Naveen", "Age":"21"})
>>> x
'{"name": "Naveen", "Age": "21"}'

# import everything from serializers
>>> from apis.serializers import *

# create a object of type Geeks
>>> obj = Geeks(x)

# serialize the object
>>> serializer = GeeksSerializer(obj)

# print serialized data
>>> serializer.data
{'json_data': '{"name": "Naveen", "Age": "21"}'}

对JSONField的验证

请注意,这些字段的主要目的是传递验证信息,例如JSONField只验证JSON数据。让我们检查一下这些验证是否有效。

# Create a dictionary and add invalid values
>>> data = {}
>>> data['json_data'] = x

# dictionary created
>>> data
{'json_data': '{"name": "Naveen", "Age": "21"}'}

# deserialize the data
>>> serializer = GeeksSerializer(data=data)

# check if data is valid
>>> serializer.is_valid()
True

# check the errors
>>> serializer.errors
{}

高级概念

验证是反序列化的一部分,而不是序列化。正如前面所解释的,序列化是将已经生成的数据转换为另一种数据类型的过程,所以不需要这些默认的验证。反序列化需要验证,因为数据需要被保存到数据库或任何其他指定的操作。因此,如果你使用这些字段来序列化数据,就可以了。

串行器字段中的核心参数

参数 说明
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表格字段的值。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程