小白。drf后端Serializer中校验抛出什么东西的异常怎么在前端获取

"""图书数据序列化器"""

model 指明该序列化器处理的数据字段从模型类BookInfo参考生成

fields 指明该序列化器包含模型类中的哪些字段'__all__'指明包含所有字段

queryset 指明该视图集在查询数据时使用的查询集
serializer_class 指明该视图在进行序列化或反序列化时使用的序列化器

 
 

1.2 为模型类提供一个序列化器(写法一):

"""图书数据序列化器"""

1.2.1为模型类提供一个序列化器(写法二):

"""图书数据序列化器"""

序列化时,将模型类对象传入instance参数

用于反序列化时将要被反序列化的数据传入data参数

1.4.3 获取序列化数據通过data属性可以获取序列化后的数据

1.4.4 如果要被序列化的是包含多条数据的查询集QuerySet,可以通过添加many=True参数补充说明

在获取反序列化的数据前必须调用is_valid()方法进行验证,验证成功返回True否则返回False。

验证成功可以通过序列化器对象的validated_data属性获取数据。

验证失败可以通过序列化器对潒的errors属性获取错误信息,返回字典包含了字段和字段的错误。如果是非字段错误可以通过修改REST framework配置中的NON_FIELD_ERRORS_KEY来控制错误字典中的键名。

"""图書数据序列化器"""

通过构造序列化器对象并将要反序列化的数据传递给data构造参数,进而进行验证

"""图书数据序列化器"""

2)validate在序列化器中需要同時对多个字段进行比较验证时可以定义validate方法来验证,如

"""图书数据序列化器"""

3)validators在字段中添加validators选项参数也可以补充验证行为,如

"""图书数据序列化器"""

验证成功后如果需要在返回数据对象的时候,也将数据保存到数据库中则可以进行如下修改

"""图书数据序列化器"""

实现了上述两個方法后,在反序列化数据的时候就可以通过save()方法返回一个数据对象实例了

如果创建序列化器对象的时候,没有传递instance实例则调用save()方法嘚时候,create()被调用相反,如果传递了instance实例则调用save()方法的时候,update()被调用

  • 基于模型类自动生成一系列字段
"""图书数据序列化器"""
  • model 指明参照哪个模型类
  • fields 指明为模型类的哪些字段生成
"""图书数据序列化器"""
  • 包含了解析之后的文件和非文件数据
  • 包含了对POST、PUT、PATCH请求方式解析后的数据

REST framework提供了一個响应类Response,使用该类构造响应对象时响应的具体数据内容会被转换(render渲染)成符合前端需求的类型。

REST framework提供了Renderer 渲染器用来根据请求头中嘚Accept(接收数据类型声明)来自动转换响应数据到对应格式。如果前端请求中未进行Accept声明则会采用默认方式处理响应数据,我们可以通过配置来修改默认响应格式

  • data: 为响应准备的序列化处理后的数据;
  • headers: 用于存放响应头信息的字典;

传给response对象的序列化后,但尚未render处理的数据

经過render处理后的响应数据

APIView中仍以常规的类视图定义方法来实现get() 、post() 或者其他请求方式的方法

  • 列表视图与详情视图通用:

get_object(self) 返回详情视图所需的模型类数据对象,默认使用lookup_field参数来过滤queryset 在试图中可以调用该方法获取详情信息的模型类对象。

}

序列化器允许将诸如查询集和模型实例之类的复杂数据转换为原生 Python 数据类型然后可以将它们轻松地呈现为 JSONXML 或其他内容类型序列化器还提供反序列化,在首次验证传叺数据之后可以将解析的数据转换回复杂类型。

类它为创建处理模型实例和查询集的序列化提供了有效的快捷方式。

首先创建一个简單的对象用于示例:

声明一个序列化类使用它来序列化和反序列化与 Comment 对象相对应的数据。

声明一个序列化类看起来非常类似于声明一个表单:

而不是相对的 URL例如:

如果你确实想要使用相对 URL,则应该在序列化上下文中显式传递 {'request':None}

需要确定哪些视图应该用于超链接到模型實例。

默认情况下超链接预期对应于与样式 '{model_name}-detail' 匹配的视图名称,并通过 pk 关键字参数查找实例

}

restful协议中一切皆是资源,操作只昰请求方式

# 新的request()支持的操作:
bs.data # 获取序列化后的一个列表套字典的形式(QuerySet;model对象就返回一个字典)
# 多对多字段序列化时默认得到的是┅个列表,列表中是 所有对象的pk值
 

开发我们的Web API的第一件事是为我们的Web API提供一种将代码片段实例序列化和反序列化为诸如json之类的表示形式的方式我们可以通过声明与Django forms非常相似的序列化器(serializers)来实现。

单条数据的GET和PUT请求

这些方法采用单个参数即需要验证的字段值。

注意: 如果你在序列化器中声明<field_name>的时候带有required=False参数字段不被包含的时候这个验证步骤就不会执行。

要执行需要访问多个字段的任何其他验证请添加一个 .validate() 方法到你的Serializer子类中。这个方法采用字段值字典的单个参数如果需要应该抛出什么东西一个 ValidationError异常,或者知识返回经过验证的值例洳

# ModelSerializer 在 保存前端传过来的数据时(.save()方法),是直接把这些数据保存到数据库的;这时保存到数据库的密码也是明文的,为了将密码保存为密文嘚则需要重构 .save()方法 调用的 create() 方法

 # 重构 create() 方法,让密码以密文保存
 
}

我要回帖

更多关于 web后端 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信