利用drf写数据的增删查看所要注意的点

一对一关系,可以级联删除 on_delete = models.CASCADE

其他数据要级联删除的时候需要考虑 如果图书和出版社关联 出版社被删除 则图书数据会全部丢失 这在实际工作中是非常可怕的

on_delete = models.DO_NOTHING、models.SET_NULL(注意生成字段时需要设置NULL=True 、)、models.SET_DEFAULT (在字段生成时设置默认值)

日期类型:auto_now=True(更新数据时就会记录下时间),auto_now_add=True(生成数据时记录时间后不手动更改就不会改变)

基础表的设置:如每个表都会有 is_delete字段  create_time  last_update_time字段 可以设置成一个基础表让其他表来继承,

下列设置可以将基础模板表并不在数据库中真的生成

class Meta:
    abstract = True

 

2.数据的增删改查

1.单条查询(get请求带pk值),多条查询(get请求)

2.单条增和多条增的区别 if isinstance(request.data,list): 如果是多条同时增则 有many=True,(many=True时并不一定时单条与多条 在序列化的数据是列表格式即使只有一条也应该设置成many=True)  

3.难点 单条修改与多条修改 单条修改 partial=True 可以不用传所有的字段 只需要传要修改的字段即可

多条修改思路:
[所要修改对象列表],[修改后的数据]  循环request.data,pop出pk值,拿到pk值的book列表,再将取出pk值的数据重新组成一个新列表。

重写ListSerializer的update方法即可,在序列化组件的中 设置参数list_serializer_class=重写的ListSerializer的方法

重写update方法也就是 循环修改后的enumerate(数据) 拿到i和数据

然后 序列化器(原数据[i],data=数据即可)

 

3,根据ip限制频率

-自定义频率(ip,user_id)

-继承SimpleRateThrottle

-重写get_cache_key,返回什么就以什么为key值进行限制

-scope字段,再setting中字段设置要与之对应

 

4,分页

三种分页器

继承

设置四个参数即可

找对应的意思即可 一般都有最大显示条数,默认显示条数,每页查询的key值 也就是从第几页开始查

APIview视图下需要自己使用分页器 也就是 实例化后传参数

GenericAPIview只需要设置参数即可pagination_class = 重写分页器后的类 

 

posted @ 2021-07-05 09:16  不想拖累他人  阅读(280)  评论(0)    收藏  举报