第七章:大型程序的结构
大型程序的结构
项目结构
- Flask程序一般都保存在名为app的包中
- migrations文件夹包含数据库迁移脚本
- 单元测试编写在tests包中
- venv文件包含Python虚拟环境
- requirements.txt列出了所有依赖包,便于在其他电脑中重新生成相同的虚拟环境
- config.py存储配置
- manage.py用于启动程序以及其他的程序任务
开发、测试和生产环境要使用不同的数据库,这样才不会彼此影响
程序包用来保存程序的所有代码、模板和静态文件,我们把这个包直接称为app
使用程序工厂函数
延迟创建程序实例,把创建过程移到可显示调用的工厂函数中。程序的工厂函数在app包的构造文件中定义,这种方法不仅可以给脚本留出配置程序的时间,还能
创建多个应用程序实例。
蓝本
在单脚本中,程序实例存在于全局作用域中,路由可以直接使用app.route修饰器定义。
Flask使用 蓝本 定义路由,蓝本中定义的路由处于休眠状态,知道蓝本注册到程序上后,路由才真正成为程序的一部分。
在蓝本中编写视图函数主要有两点不同:
- 和前面错误处理程序一样,路由修饰器由蓝本提供
- url_for()函数用法不同。
蓝本中,Flask会为蓝本中的全部端点家上一个命名空间,这样就可以在不同的蓝本中使用相同的端点名定义视图函数,而不是产生冲突。
命名空间就是蓝本的名字(Blueprint构造函数的第一个参数),index()注册的端点是main.index, url_for('main.index')
url_for()还支持一种简写的端点形式,url_for('.index')。在这种写法中,命名空间是当前请求所在的蓝本。
__跨蓝本__的重定向必须使用带有命名空间的端点名。
需求文件
requirements.txt 用于记录所有依赖包及其精确的版本号
pip freeze >requirements.txt 可以自动生成这个文件
如果要创建这个虚拟环境的完全副本,可以创建一个新的虚拟环境
pip install -r requirements.txt
创建数据库
不管从哪里获取数据库URL,都要在新数据库中创建数据表。如果使用Flask-Migrate跟踪迁移,可使用如下命令创建数据表或升级到最新修订版本:
python manage.py db upgrade