说明:

在整个项目的文件中,主文件manage.py只是负责项目的启动,所以我们需要对其他的代码进行抽取,让主文件看起来更简洁。

一. 主文件配置类的抽取

我们需要在项目文件的相同目录下建立一个新的文件config.py,然后把我们主文件的配置类先粘贴过去:

DAY 3 项目的代码抽取_导包

 

 

 当需要导包时将鼠标放到红线上使用Alt+回车快速导包。

DAY 3 项目的代码抽取_导包_02

 

 

 先把主文件的配置类注释掉,将confi文件中的Config配置类导入,测试是否正常运行。

DAY 3 项目的代码抽取_业务逻辑_03

再次执行显示正常执行之后就可以把主文件中的的配置类删除。这样就完成了配置类的抽取分离。

二,app信息抽取

app的相关代码都是业务逻辑相关代码,所以,我们最好将其封装到业务逻辑部分中。

这里,我们需要新建一个Python Package的包,命名为info,以后里面就存储着业务逻辑相关代码。

这里,我们将与app相关的部分抽取到info的__init__中,因为业务逻辑只要一开始,就会优先执行__init__文件中的内容。

***但是不要全部抽取,运行的部分保留在主文件中***

DAY 3 项目的代码抽取_命名空间_04

 

 

 抽取完成后会发现需要大量的导包,这些包我们主文件都有,将主文件中灰色的部分粘贴过来就行:

DAY 3 项目的代码抽取_导包_05

 

 

 粘贴完成之后的__init__文件:

DAY 3 项目的代码抽取_命名空间_06

 

 

 对抽取后的主文件进行测试(所有主文件抽取的代码一定要在测试完成之后再进行删除,在那之前注释掉就行.):

抽取后会发现主文件的运行代码中缺少db,app

DAY 3 项目的代码抽取_初始化_07

 

 

 我们需要将info文件夹中__init__文件里的db,app导包过来

DAY 3 项目的代码抽取_初始化_08

 

 

 然后执行测试,没有问题后对主文件中抽取的代码进行删除。一定要在测试没有错误的条件下进行。

现在主文件代码就只剩运行相关的代码了:

DAY 3 项目的代码抽取_导包_09

 

 

三,工厂方式的建立

1.创建不同工作环境下的类

不同开发环境会有不同的配置,所以我们要封装不同开发环境下的配置信息。

首先我们在config.py中建立不同环境的类如下,所有环境的配置类继承自我们的初始Config配置类:

DAY 3 项目的代码抽取_业务逻辑_10

 

 

然后我们需要将配置文件中所有环境下的配置类导入到info的__init__文件中

 

DAY 3 项目的代码抽取_主文件_11

 

 

 当我们需要哪种环境就对app的环境配置进行修改,修改为对应的环境配置,但是这样就会遇到测试的问题,我们下面来进行解决

 

 

 2.用工厂方法创建app 

因为app的相关信息的修改和业务逻辑有关,当进行测试,每当我们修改了业务逻辑的相关内容,都必须要进行测试,哪怕只是加了个空格,改了标点也要重新测试(没错,就是这么恶心)。所以,我们需要在不改变info文件的内容的情况下进行。而目前和业务逻辑无关的是manage.py和config.py我们要看看从哪个文件入手,来间接地处理这个问题,这里我们选择的是manage.py。

我们需要将app的实例化过程踢入到函数中来进行,因为函数有个重要的功能传参,对了我们需要将不同环境的配置类来当成参数传染传给我们创建的函数中来进行执行。

我们在info的__init__文件中建立一个create_app函数:

DAY 3 项目的代码抽取_主文件_12

 

 这里db会没办法执行,因为db是在函数的局部命名空间里面而我们需要在外面的全局命名空间中使用。我们先将它注释掉后面再解决

 

 

DAY 3 项目的代码抽取_主文件_13

 

 然后修改主文件,不再导入db,app,而是将我们创建好的函数导入。然后再进行调用,我们也将需要db的代码先注释。

DAY 3 项目的代码抽取_初始化_14

 

 当我们执行后会发现一个错误提示:提示没有发现app

DAY 3 项目的代码抽取_命名空间_15

 

 因为我们还没有将函数中app的值返回出去并让我们函数调用保存的app变量进行接收。我们到创建的函数中进行返回值的添加(return app):

 DAY 3 项目的代码抽取_初始化_16

 

 当我们再次执行主文件,就会发现问题已经解决。

下一步,传参:

首先在配置类文件中建立一个配置环境的列表:

DAY 3 项目的代码抽取_主文件_17

 

 然后我们将info的__init__文件中的导入信息进行修改(改成创建好的配置列表),函数中加入形参config_name并对函数中的相关配置信息进行修改:

DAY 3 项目的代码抽取_命名空间_18

 

 修改之后我们在主文件中的函数中传入不同的配置参数进行测试

DAY 3 项目的代码抽取_业务逻辑_19

 

 DAY 3 项目的代码抽取_初始化_20

 

 生产环境我们没有配置debug。所以现在就能通过传入不同的环境参数来进行不同环境的配置

db的解决

因为我们需要在全局命名空间下进行使用

所以我们在函数外建立一个db的初始连接对象,不传入参数。

DAY 3 项目的代码抽取_命名空间_21

 

 这一步的操作以及剩下的操作可以通过查看原码来发现

DAY 3 项目的代码抽取_命名空间_22

 

 DAY 3 项目的代码抽取_导包_23

 

 默认app为None,再看下边,如果app不等于None,那么就初始化app,我们只需要在函数中再进行初始化即可,这样当函数调用时就可以完db的初始化:

DAY 3 项目的代码抽取_初始化_24

 

然后我们在主文件中导入db就可以了。

DAY 3 项目的代码抽取_初始化_25

 

 然后再进行测试,用控制台执行初始化数据库,查看迁移文件是否被建立

 

 DAY 3 项目的代码抽取_业务逻辑_26

 

 当出现done是就表示没有问题了。