DRF框架使用时的一些注意点
之前的文章代码块在安卓手机显示正常,但是苹果手机总是不能滚屏,非常影响阅读。今天总算解决了这个问题,苹果手机显示正常了。希望给大家带来最好的阅读体验。喜欢的话就点一下好看,关注一下本公众号吧。
1.格式化数据
我们想要将字典数据格式化显示(默认显示的是一个字典在一行,可读性比较差),可以按下面的代码将其调整:
# 格式化显示
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参数来允许部分字段更新。
data ={'btitle':'射雕英雄传'}
# 下面是创建序列化器对象
serializer =BookInfoSerializer(book,data=data,partial=True)
在里面,我们定义字段的时候,btitle和bpub_date是设置了required,是必传项。我们只传一个值的时候,在校验过程是会失败的。我们指定了partial参数为True的时候,就是允许我们只修改btitle部分,校验时是不会报错的。
3.反序列化器的save特殊用法
我们在反序列化数据的保存和更新的时候,调用的save方法是可以进行传值的
# 获取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方法:
serializer.is_valid(raise_exception=True)
其实这个方法是可以传参数的,传入上面的rasise_exception参数。它默认是为False的,也就是如果校验失败的时候,给我们返回False。如果我们将参数的值改为True,那么在校验失败的时候不会给我们返回False,而是直接报错。
有人说这功能鸡肋,其实根据具体的需求而定,大家了解即可。
6.序列化&反序列化
这两个概念很重要,多次强调也不为过,因此再强调一遍,让大家加深一下印象。
6.1序列化
序列化复杂的概念不需要记忆,因为也记不住,那么绕。我们只需要明白一点就好了:
序列化做的事情就是将我们查找出来的模型类对象转化成json数据(字典)的一个过程
对象---->json/字典
6.2反序列化
同理,我们还是记住下面的一句话即可
前端获取到的数据保存为模型类对象的一个过程。
json/字典---->对象