第七章:大型程序的结构

大型程序的结构

项目结构

  • Flask程序一般都保存在名为app的包中
  • migrations文件夹包含数据库迁移脚本
  • 单元测试编写在tests包中
  • venv文件包含Python虚拟环境
  • requirements.txt列出了所有依赖包,便于在其他电脑中重新生成相同的虚拟环境
  • config.py存储配置
  • manage.py用于启动程序以及其他的程序任务

开发、测试和生产环境要使用不同的数据库,这样才不会彼此影响

程序包用来保存程序的所有代码、模板和静态文件,我们把这个包直接称为app

使用程序工厂函数

延迟创建程序实例,把创建过程移到可显示调用的工厂函数中。程序的工厂函数在app包的构造文件中定义,这种方法不仅可以给脚本留出配置程序的时间,还能
创建多个应用程序实例。

蓝本

在单脚本中,程序实例存在于全局作用域中,路由可以直接使用app.route修饰器定义。

Flask使用 蓝本 定义路由,蓝本中定义的路由处于休眠状态,知道蓝本注册到程序上后,路由才真正成为程序的一部分。

在蓝本中编写视图函数主要有两点不同:

  1. 和前面错误处理程序一样,路由修饰器由蓝本提供
  2. 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
posted @ 2017-04-07 16:39  Cheko  阅读(418)  评论(0编辑  收藏  举报