利用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 = 重写分页器后的类
浙公网安备 33010602011771号