61.Django03

Posted heirenxilou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了61.Django03相关的知识,希望对你有一定的参考价值。

一、Django ORM创建表关系

首先我们回顾一下mysql中是如何创建表关系的表之间的关系

表与表之间无非三种关系:一对多,多对多,一对一

我们就拿之前mysql用的作者和图书之间的多对多关系,再加上一个出版社表来形成上述三种关系的例子

很明显,我们可以看出:

图书和出版社是一对多的关系 外键字段建在多的那一方

图书和作者是多对多的关系 需要创建第三张表来专门存储

作者与作者详情表是一对一

了解完了表关系,那在ORM中我们用代码来实现

首先是创建表,然后再添加外键

class Book(models.Model):
    title = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=8,decimal_places=2)
    # 总共八位 小数点后面占两位
    """
    图书和出版社是一对多 并且书是多的一方 所以外键字段放在书表里面
    """
    publish = models.ForeignKey(to=Publish)  # 默认就是与出版社表的主键字段做外键关联
    """
    如果字段对应的是ForeignKey 那么会orm会自动在字段的后面加_id
    如果你自作聪明的加了_id那么orm还是会在后面继续加_id
    
    后面在定义ForeignKey的时候就不要自己加_id
    """


    """
    图书和作者是多对多的关系 外键字段建在任意一方均可 但是推荐你建在查询频率较高的一方
    """
    authors = models.ManyToManyField(to=Author)
    """
    authors是一个虚拟字段 主要是用来告诉orm 书籍表和作者表是多对多关系
    让orm自动帮你创建第三张关系表
    """


class Publish(models.Model):
    name = models.CharField(max_length=32)
    addr = models.CharField(max_length=32)


class Author(models.Model):
    name = models.CharField(max_length=32)
    age = models.IntegerField()
    """
    作者与作者详情是一对一的关系 外键字段建在任意一方都可以 但是推荐你建在查询频率较高的表中
    """
    author_detail = models.OneToOneField(to=AuthorDetail)
    """
    OneToOneField也会自动给字段加_id后缀
    所以你也不要自作聪明的自己加_id
    """

class AuthorDetail(models.Model):
    phone = models.BigIntegerField()  # 或者直接字符类型
    addr = models.CharField(max_length=32)

那么上述的几种表之间的关系我们就通过Django ORM代码实现了

这里需要注意的是在django1.X版本中外键默认都是级联更新删除的

二、Django请求生命周期流程

1、请求生命周期的概念

Django的请求生命周期是指:当用户在浏览器上输入url到用户看到网页的这个时间段内,Django后台所发生的事情。

2、请求生命周期内的过程

(1)过程描述
第一步:浏览器发起请求
第二步:WSGI创建socket服务端,接收请求(Httprequest)
第三步:中间件处理请求
第四步:url路由,根据当前请求的URL找到视图函数
第五步:view视图,进行业务处理(ORM处理数据,从数据库取到数据返回给view视图;view视图将数据渲染到template模板;将数据返回)
第六步:中间件处理响应
第七步:WSGI返回响应(HttpResponse)
第八步:浏览器渲染

 

技术图片

 

 

 这张图就是Django请求生命周期的这么一个流程图

 

以上是关于61.Django03的主要内容,如果未能解决你的问题,请参考以下文章

如何获取当前显示的片段?

KDoc:插入代码片段

Android小部件,启动一个片段?

Python 向 Postman 请求代码片段

超级有用的9个PHP代码片段

iphone / Objective c的最佳代码片段网站是啥[重复]