前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DRF框架使用时的一些注意点

DRF框架使用时的一些注意点

作者头像
小闫同学啊
发布2019-07-18 11:36:14
6990
发布2019-07-18 11:36:14
举报
文章被收录于专栏:小闫笔记小闫笔记

DRF框架使用时的一些注意点

之前的文章代码块在安卓手机显示正常,但是苹果手机总是不能滚屏,非常影响阅读。今天总算解决了这个问题,苹果手机显示正常了。希望给大家带来最好的阅读体验。喜欢的话就点一下好看,关注一下本公众号吧。

1.格式化数据

我们想要将字典数据格式化显示(默认显示的是一个字典在一行,可读性比较差),可以按下面的代码将其调整:

代码语言:javascript
复制
# 格式化显示
import json
res = json.dumps(res_data, indent=4,ensure_ascii=False)
print(res)
----------------------
{
    "id": 1,
    "btitle": "射雕英雄传",
    "bpub_date": "1980-05-01",
    "bread": 12,
    "bcomment": 34,
    "image": null
}

indent代表的是缩进,ensure_ascii改为False可以将中文显示正常。

2.序列化器传值注意的小点

默认序列化器必须传递required的字段,否则会剖出验证异常。但是我们可以使用partial参数来允许部分字段更新。

代码语言:javascript
复制
data = {'btitle':'射雕英雄传'}
# 下面是创建序列化器对象
serializer = BookInfoSerializer(book,data=data,partial=True)

在里面,我们定义字段的时候,btitle和bpub_date是设置了required,是必传项。我们只传一个值的时候,在校验过程是会失败的。我们指定了partial参数为True的时候,就是允许我们只修改btitle部分,校验时是不会报错的。

3.反序列化器的save特殊用法

我们在反序列化数据的保存和更新的时候,调用的save方法是可以进行传值的

代码语言:javascript
复制
# 获取id为1的图书
    book = BookInfo.objects.get(id=1)

    data = {
        'btitle':'射雕英雄传2',
        'bpub_date':'1980-10-1'
    }

    # 创建序列化器对象
    serializer = BookInfoSerializer(book,data=data)

    # 调用is_valid方法进行数据校验
    print(serializer.is_valid())

    print(serializer.errors)

    # 反序列化-数据的保存
    # save里面是可以传递参数的,我们在调用create和update的时候也是可以取的到值的。
    serializer.save(a=1,b=3)

我们在调用save方法的时候,如果是新增数据的话,是调用了继承的父类的create方法,我们在序列化其类里面对其进行了重写;如果是更新数据的话,是调用了父类的update方法,我们在序列化器类里面也是对其进行了重写。

我们在save中进行传值的时候,这些额外的参数,在create和update被调用的时候也是接收的到的。

4.ModelSerializer的继承

使用:序列化器针对某个Django框架的模型类。

好处

1.依据模型类的字段自动生成序列化器类的字段

2.已经实现了create和update方法的代码

5.反序列化校验

反序列化校验数据的时候我们用到了is_valid方法:

代码语言:javascript
复制
serializer.is_valid(raise_exception=True)

其实这个方法是可以传参数的,传入上面的rasise_exception参数。它默认是为False的,也就是如果校验失败的时候,给我们返回False。如果我们将参数的值改为True,那么在校验失败的时候不会给我们返回False,而是直接报错。

有人说这功能鸡肋,其实根据具体的需求而定,大家了解即可。

6.序列化&反序列化

这两个概念很重要,多次强调也不为过,因此再强调一遍,让大家加深一下印象。

6.1序列化

序列化复杂的概念不需要记忆,因为也记不住,那么绕。我们只需要明白一点就好了:

序列化做的事情就是将我们查找出来的模型类对象转化成json数据(字典)的一个过程

对象---->json/字典

6.2反序列化

同理,我们还是记住下面的一句话即可

前端获取到的数据保存为模型类对象的一个过程。

json/字典---->对象

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈技术精选 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • DRF框架使用时的一些注意点
    • 1.格式化数据
      • 2.序列化器传值注意的小点
        • 3.反序列化器的save特殊用法
          • 4.ModelSerializer的继承
            • 5.反序列化校验
              • 6.序列化&反序列化
                • 6.1序列化
                • 6.2反序列化
            相关产品与服务
            文件存储
            文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档