Django 是以 python 作为开发语言的网站模板框架,在和同类型的 Flask 进行对比时,主要的优点是部署快速,基本上的各个功能模块都已经具备,只需要对一些参数进行修改设置即可。
Django 架构
整个 Django 的架构可以分为
- URL解析,负责对前端的URL请求进行分析,然后分配给不同的应用,这里的应用就是一个application,更具体就是专门处理某项功能的一个模块,例如专门处理 Email 的应用等。
- View处理,在收到网络请求之后,针对不同的请求,采用不同的函数/方程,对请求进行处理,这里的处理有两个分类,一个是偏计算类的处理,一个是偏数据类的处理,如果是偏数据类的处理的话,还有有跟底层数据库之间的互动和数据获取/处理等操作
- 数据库操作,Django 可以适配的数据库有很多,默认自带的是SQLite,但是一般来说,更多人使用 Mysql 或者 Postgresql 数据库
一、数据库操作
在数据库操作的过程中,一类是数据的聚合,即 SQL 中的 Group By 操作。
Django 中和数据库的交互有自己的一套语法
聚合
聚合中的操作,有以下几个:
- annotate: 相当于 SQL 中的 Partition By
- values:相当于 SQL 中的 select
- aggregate: 相当于 SQL 中的 Sum/ Count 等聚合操作
如果要对应SQL中的Group By 则要 values() 和 annotate 结合使用
举个例子
SQL 中 的
select A,
sum(B) as sum_B
from T1
group by A
使用 Django 实现的话则为
T1.values(A).annotate(sum_B = Sum(B))
所以这里的 values(A) 相当于 group by A, annotate 变成了 aggragate 的功能,这里使用的 Sum 操作的功能
二、manage.py 操作
migrate
在 django 的官方文档中,对 migrate 的解释是
Synchronizes the database state with the current set of models and migrations. Migrations, their relationship with apps and more are covered in depth in the migrations documentation.
这个操作主要是对模型的一些改变和模型之间的关系的一些更新进行和数据库同步
但是,在实际的使用过程中,也发现了 migrate 的一些问题,例如我删除了一个模型数据表,但是之后又对这个模型的字段进行了一些修改,然后发现在真实的数据库中,并没有出现这个模型。
这个时候,我们需要告诉 migrate 明确需要做什么,即下面的指令
migrate --run-syncdb
这个是明确告诉 migrate 不需要经过 makemigrations,直接进行模型和数据库的同步
Django 的文档中的解释是这样的
Allows creating tables for apps without migrations. While this isn’t recommended, the migrations framework is sometimes too slow on large projects with hundreds of models.
这里 Django 官方文档中对这个命令的顾虑是在我们的模型很多的时候,可能处理速度会很慢