之前我们只用一个hello.py就能完成了flask创建一个简单的web应用,首先让我们看下之前文件组织形式。
在mysite文件下有3个顶层文件:migration负责数据库迁移;static存放静态文件如css,js,images等;templates存放网页。hello.py负责启动应用,data.sqlite存放数据。
看起来不错,如果我希望为这个WEB增加多一些应用(app)呢,hello.py是不是会越来越大呢?会不会越来越难以管理呢?那么目前的结构就需要升级了,好让hello.py瘦身。
如果光看文件目录的话,大致新建一个文件夹(如flasky),然后把原先的文件夹(如mysite)重命名为app,把hello.py重命名为__Init__.py.
当然这样做之后,你用python app/__init__.py是无法启动程序的
,因为 Python 不希望包内的模块成为启动文件。当然这又不是什么大不了的事情,与app同级路径下新建一个manage.py,内部代码如下:
from app import app
app.run()
这样时候再运行一下试试看?是不是一又可以用了。
但是说好的hello.py瘦身,你只是换个名字而已呀!
首先看下我们hello.py,内容太多,多图预警
大致可以把原先的hello.py分为以下几个部分:所需库导入;应用设置(app.config);程序扩展功能(xxxx=xxxx(app);数据库模型(class xxx);视图函数(index())和错误处理部分。
既然hello.py(__init__.py)其实看成多个功能模块的组合,那么就把这些功能拆分为各个py文件,然后__init__.py导入各个模块进行加载。
那么最新的结构如下
但是这个时候问题来了view.py的app是__init__.py中定义的,而__init__.py又要导入views才能返回页面,就变成你中有我,我中 有你,并且运行还出现各种问题,但是对于我那么懒得人,需要一个新的办法来解决。下篇介绍一个 Modular Applications with Blueprints蓝图先来解决这个烦人的问题。
所以__init__.py还是需要像之前一样胖,下一样进行修改。