前言
手把手教你如何创建一个简约优美的MOCK框架实例~速戳!
创建一个flask项目
我们可以从pycharm编辑器中直接新建一个flask项目,再添加几个后续要用到的文件,结构初始化如下:1
2
3
4
5
6
7
8
9
10
11MyFlaskTest
-flaskr #主程序
-mock_tests
-__init__.py
-mock1.py #mock实例文件
-__init__.py
-static
-templates #存储HTML文件
-app.py #程序启动文件
-config.py #配置文件
-extensions.py #扩展类实例化
其中app.py文件已经自动创建好一个实例,但默认配置显得不够高大上。后续如果想为实例分配不同的环境配置和更清晰的控制程序,我们可以引入工厂函数的概念。
工厂函数
概念
使用工厂函数来创建程序实例,需要使用到蓝图。这个工厂函数用个大白话来说,就是封装一个名为create_app()的函数,这个函数返回程序实例app,使用这个函数就可以在任何地方去创建程序实例。另外借助工厂函数,我们还可以扩展加载和初始化配置,使得创建的对象操作可以分离到单独的模块,减少循环依赖的发生。
工厂函数的使用
在工程文件下编辑init.py文件,代码内容如下
1 | # flaskr/__init__.py |
工厂函数接受配置名作为参数,返回创建好的程序实例,加载相关配置。工厂函数一般在程序包的构造文件中创建,你也可以在程序包内新建的模块来存放,比如factory.py或是app.py。
扩展实例
为了更好的运用起工厂函数和完成扩展的初始化操作,我们需要在实例化扩展类时传入程序实例。但使用工厂函数时,并没有一个创建好的程序实例可以导入。如果我们把实例化操作放到工厂函数中,那么我们就没有一个全局的扩展对象可以使用,比如表示数据库的db对象。
为了解决这个问题,大部分扩展都提供了一个init_app()方法来支持分离扩展的实例化和初始化操作。现在我们仍然像往常一样初始化扩展类,但是并不传入程序实例。这时扩展类实例化的工作可以集中放到extension.py脚本中。
1 | #MyFlaskTest/extension.py |
现在,当我们需要在程序实例中使用扩展对象时,直接从这个extensions模块导入即可。在工厂函数中,我们导入所有扩展对象,并对其调用init_app()方法,传入程序实例完成初始化操作:
1 | # flaskr/__init__.py |
创建蓝图
Blueprint概念
简单来说,Blueprint 是一个存储操作方法的容器,这些操作在这个Blueprint 被注册到一个应用之后就可以被调用,Flask 可以通过Blueprint来组织URL以及处理请求。 Flask使用Blueprint让应用实现模块化,在Flask中,Blueprint具有如下属性:
- 一个应用可以具有多个Blueprint
- 可以将一个Blueprint注册到任何一个未使用的URL下比如 “/”、“/sample”或者子域名
- 在一个应用中,一个模块可以注册多次
- Blueprint可以单独具有自己的模板、静态文件或者其它的通用操作方法,它并不是必须要实现应用的视图和函数的
- 在一个应用初始化时,就应该要注册需要使用的Blueprint
- 一个Blueprint并不是一个完整的应用,它不能独立于应用运行,而必须要注册到某一个应用中。
蓝图的使用
在mock_tests文件下编辑init.py1
2
3
4
5
6#mock_tests/__init__.py
from flask import Blueprint
# 创建一个蓝图实例,名字叫mockTest
mockTest = Blueprint('mockTest', __name__)
创建一个mock程序文件
接下来就非常简单了,想要模拟什么接口就写什么。在mock_tests文件下创建编辑mock1.py文件。
1 | # mock_tests/mock1.py |
这样就可以统一使用一个蓝图组件下的不同mock文件,使得文件具有相同的属性。
编辑配置文件
本案例配置文件内容比较简单,如下:
1 | #flask/config.py |
配置文件可以使用自带参数,也可以自定义环境参数,配置灵活简单。之后还可以配合服务部署做环境配置。送上一份配置参数参考:
1 | { |
修改app.py文件
因为使用到工厂函数,所以需要修改下app.py文件,代码简单直观。
1 | # flaskr/app.py |
启动程序
当使用flask run命令启动程序时,Flask的自动发现程序实例机制还包含另一种行为:flask会自动从环境变量FLASK_APP的值定义的模块中寻找名称为create_app()或make_app()的工厂函数,自动调用工厂函数创建程序实例并运行。本案例我们是将工厂函数放在app.py中调用,所以我们可以直接用python app.py来直接运行程序,如下:
1 | (base) E:\MyFlaskTest>python app.py |
结束
到这里就结束了,同学们可以自行调试,按照工作需要自行添加mock内容。搞定了别忘了来给我点个赞哦,比心!
参考文章:
flask官方中文文档
flask实战-个人博客-使用工厂函数创建程序实例