二次封装Response、断关联、基表

一、Response二次封装

在应用文件夹下新建response.py文件
from rest_framework.response import Response

class APIResponse(Response):
        def __init__(self, status=0, msg='ok', http_status=None, headers=None, exception=False, **kwargs):
                  # 将外界传入的数据状态码、状态信息以及其他所有额外存储在kwargs中的信息,都格式化成data数据
                  data = {
                          'status': status,
                          'msg': msg
                        }
                  # 在外界数据可以用result和results来存储
                 if kwargs:
                        data.update(kwargs)

                        super().__init__(data=data, status=http_status, headers=headers, exception=exception)

二次封装的原因:

 

 

封装的原理:

 

 

 使用:

# APIResponse() 代表就返回 {"status": 0, "msg": "ok"}

# APIResponse(result="结果") 代表返回 {"status": 0, "msg": "ok", "result": "结果"}

# APIResponse(status=1, msg='error', http_status=400, exception=True) 异常返回 {"status": 1, "msg": "error"}

二、断关联:

用法:外键字段中写入 db_constraint=False 参数

 

断关系后用to=... ,related_name='..'   来建立表与表之间的关系。

结果:

 

结论:两表之间有外键联系 与 两表之间没有联系(断联系)的区别:

1)两个表之间有关系,增删改操作会相互影响(效率低),查询操作就是正常的连表操作
2)两个表之间有关系,断开关联,但所有数据保持与原来一致,
     且每个表都可以单独操作,增删改操作效率极高,但是容易出现脏数据  (开发中完全可以避免)
     由于数据没有任何变化,所以查询的连表操作不会受到任何影响
3)Django的ORM支持断关联操作关系表,且所有的操作方式和没有断关联操作一致

例子:

 

三、ORM操作关系

1、外键位置:

1)一对多:ForeignKey              必须放在 多的一方
2)多对多:ManyToManyField   放在任何一方都可以,因为会创建关系表,在关系表中用两个外键分别关联两个表
3)一对一:OneToOneField       放在依赖的表一方,作者与作者详情,放在详情表,OneToOneField会被转换为 外键 + 唯一约束

2、ORM关系Field:

ForeignKey                可以设置     related_name,    db_constraint,    on_delete
OneToOneField         可以设置     related_name,    db_constraint,    on_delete
ManyToManyField    只能设置     related_name,    db_constraint
                                   不能设置on_delete的原因:不管是关联的A表,还是B表,数据修改,都会影响到关系表(默认级联),
                                   如果想控制,只能自定义关系表,在关系表的两个外键分别设置on_delete

3、参数含义

related_name:    表之间反向访问的名字,默认是 表名小写/表名小写_set
db_constraint:    表之间的关联关系,默认为True,代表关联。设置False,可以提高增删改的效率,且不影响查等其他操作
on_delete:          在django 1.x下默认是CASCADE,在django 2.x下必须手动明确

4、on_delete中的参数

作者没,作者详情一定没:   CASCADE *****
作者没,书还是该作者出的:DO_NOTHING
部门没,部门内的员工全部进入未分组部门:   SET_DEFAULT (需要配合default属性使用)
部门没,部门内的员工部门外键字段设置为空:SET_NULL       (需要配合null=True属性使用)

 

 

四、基表

五、后台管理:admin 

 

posted @ 2020-02-20 21:39  薛定谔的猫66  阅读(287)  评论(0)    收藏  举报