drf中的请求和响应-可浏览API-常用序列化字段

drf中的请求和响应

请求对象

REST框架引入了一个扩展了常规HttpRequest的请求对象, 并提供更灵活的请求解析。请求对象的核心功能是属性request.data,这与request.POST类似,但对于WebAPIs更有用。

request.POST  # Only handles form data.  Only works for 'POST' method.
request.data  # Handles arbitrary data.  Works for 'POST', 'PUT' and 'PATCH' methods.

响应对象

REST framework还引入了一个响应对象,这是一种TemplateResponse类型,它接受未渲染的内容,并使用内容协商来确定返回给客户端的正确内容类型。

return Response(data)  # Renders to content type as requested by the client.

状态码

在视图中使用数字HTTP状态码并不总是容易读懂,而且当使用了错误的状态码还不容易发现。REST框架为每个状态代码提供了更显式的标识符, 比如status模块中的HTTP_400_BAD_REQUEST

视图包装器

REST框架提供了两个包装器,您可以使用它们来编写API视图。

  • @api_view用来装饰基本的函数视图。
  • APIview类用来创建类视图。

这些包装器提供了一些功能,比如确保在视图中接收到请求实例,并向响应对象添加上下文,以便可以执行内容协商。

包装器还提供了一些行为,比如在适当的时候返回405 Method Not Allowed响应,以及处理当request.data输入不正确数据时发生的任何ParseError异常。

可浏览API

为url添加可选的格式后缀

  1. 修改视图

    • 在视图函数里加关键字参数format
  2. 修改路由

    • 在路由中添加格式
  3. 然后我们就可以通过添加格式后缀来获取不同的内容:

/students.json   # 返回的就是json数据
/students.api    # 可浏览的api模式,html
  1. 还可以通过accept来控制响应的格式:
accept:application/json   # request json
accept:text/html          # request html

常用序列化器字段

序列化器字段处理基元值和内部数据类型之间的转换。它们还处理输入值的验证,以及从它们的父对象检索和设置值。

核心参数

每个序列化器字段类构造函数至少接受这些参数。一些字段类还接受额外的,字段特定的参数,但以下应参数应该一直被接受:

read_only

字段只读,默认值为False。只读字段只会包含在序列化输出中,创建修改对象时不会包含该字段,即使输入了也会被忽略。

write_only

字段只写,默认值为False。和read_only相反,序列化时不包含,创建修改对象时必须包含该字段。

required

字段必须,默认值为True。必须字段在创建修改对象时必须包含,否则抛出异常。当设置为False时,在创建修改对象时可以不用包含该字段。

default

默认值。如果一个字段设置了默认值,那么在反序列化时,如果没有提供该字段,则使用默认值进行填充。

在进行局部更新时,default不会应用。因为局部更新时,只有更新的字段会被校验和返回。

还可以设置一个函数或者一个可调用对象,

可以设置为一个函数或其他可调用对象,在这种情况下,会使用调用后的结果进行填充。调用时,它将不接收任何参数。如果可调用对象有一个requires_context = True的属性,那么序列化字段会被当做参数传入。例如:

class CurrentUserDefault:
    """
    May be applied as a `default=...` value on a serializer field.
    Returns the current user.
    """
    requires_context = True

    def __call__(self, serializer_field):
        return serializer_field.context['request'].user

在序列化实例时,如果实例中不存在对象属性或字典键,将使用default的值填充。

注意,设置默认值意味着该字段不是必需的。同时包含默认和必需的关键字参数是无效的,将引发错误。

allow_null

通常,如果将None传递给序列化器字段,将引发错误。如果None应该被认为是一个有效值,则将该关键字参数设置为True。

注意,如果没有显式的默认值,将该参数设置为True将意味着序列化输出的默认值为None,但这并不意味着输入反序列化是默认的。

默认值为False

source

将用于填充字段的属性的名称。可以是一个只接受self参数的方法, 比如URLField(source='get_absolute_url'),或者是一个句点法的属性,比如CharField(source='channel.name')

当使用句点法序列化字段时,如果在属性遍历期间没有任何对象或为空,则可能需要提供一个默认值。

默认值为字段的名称。

validators

应该应用到输入字段的验证器函数的列表,它要么引发验证错误,要么简单地返回。验证器函数通常应该引发serializers.ValidationError,但Django内置的ValidationError也被支持,以便与Django或第三方Django包中定义的验证器兼容。

error_messages

错误消息字典。

label

一个短文本字符串,可以用作HTML表单字段或其他描述性元素中的字段名。

help_text

可以在HTML表单字段或其他描述性元素中用作字段描述的文本字符串。

CharField

文本字段,可以验证文本小于max_length大于min_length

RegexField

文本字段,可以验证文本是否匹配给定正则表达式。

IntergerField

整数字段,可以验证整数小于max_value,大于min_value

FloatField

实数字段,可以验证整数小于max_value,大于max_value

DecimalField

以十进制表示Python中由decimal的实例。

更多详解官方文档:https://www.django-rest-framework.org/api-guide/fields/#serializer-fields

posted @   夜久听山雨  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示