### 导航
- [索引](# "总目录")
- [下一页](# "应用程序的工厂函数") |
- [上一页](# "Flask 代码模式") |
- [Flask 0.10.1 文档](#) »
- [Flask 代码模式](#) »
# 大型应用
对于比较大型的应用,更好的做法是使用包管理代码,而不是模块来管理代码。这非常简单,设想一个如下结构的应用:
~~~
/yourapplication
/yourapplication.py
/static
/style.css
/templates
layout.html
index.html
login.html
...
~~~
### 简单的包
将一个项目改为一个更大的包,仅仅创建一个新的 yourapplication 文件夹在已存的文件夹下面,然后将所有的的文件都移动到它下面。之后将 yourapplication.py重命名为 __init__.py (确保先删除了其中所有的 .pyc 文件,否则可能导致错误的结果)
您最后得到的东西应该像下面这样:
~~~
/yourapplication
/yourapplication
/__init__.py
/static
/style.css
/templates
layout.html
index.html
login.html
...
~~~
如何在此种方式下运行您的应用?原来的 pythonyourapplication/__init__.py不能再工作了。这是由于 Python 不希望在包中的模块成为初始运行的文件。但这不是一个大问题,仅仅添加一个名叫 runserver.py 的新文件,把这个文件放在yourapplication 文件夹里,并添加如下功能:
~~~
from yourapplication import app
app.run(debug=True)
~~~
然后,我们又能对应用做什么呢?现在我们可以重新构造我们的应用,将其改造为多个模块。你唯一需要记住的就是下面的速记备忘表:
1. Flask 程序对象的创建必须在 __init__.py 文件里完成,这样我们就可以安全的导入每个模块,而 __name__ 变量将会被分配给正确的包。
1. 所有(上面有 [route()](# "flask.Flask.route") 装饰器的那些)视图函数必须导入到 __init__.py 文件。此时,请通过模块而不是对象本身作为路径导入这些视图函数。**必须在应用对象创建之后** 导入视图模块。
这里是 __init__.py 的一个例子:
~~~
from flask import Flask
app = Flask(__name__)
import yourapplication.views
~~~
而 views.py 应该看起来像这样:
~~~
from yourapplication import app
@app.route('/')
def index():
return 'Hello World!'
~~~
您最终应该得到的程序结构应该是这样:
~~~
/yourapplication
/runserver.py
/yourapplication
/__init__.py
/views.py
/static
/style.css
/templates
layout.html
index.html
login.html
...
~~~
循环导入
每个 Python 程序员都会讨厌他们,而我们反而还添加了几个进去:循环导入(在两个模块相互依赖对方的时候,就会发生循环导入)。在这里views.py 依赖于 __init__.py。通常这被认为是个不好的主意,但是在这里实际上不会造成问题。之所以如此,是因为我们实际上没有在__init__.py 里使用这些视图,而仅仅是保证模块被导入了。并且,我们是在文件的结尾这么做的。
这种做法仍然有些问题,但是如果您想要使用修饰器,那么没有其他更好的方法了。检查 [*聚沙成塔*](#) 这一章来寻找解决问题的些许灵感吧。
### 与蓝图一起工作
如果您有规模较大的应用,建议您将他们分拆成小的组,让每个组接口于蓝图提供的辅助功能。关于这一主题进一步的介绍请参考[*用蓝图实现模块化的应用*](#) 这一章节的文档
© 版权所有 2013, Armin Ronacher.
- 欢迎使用 Flask
- 前言
- 给有经验程序员的前言
- 安装
- 快速入门
- 教程
- 介绍 Flaskr
- 步骤 0: 创建文件夹
- 步骤 1: 数据库模式
- 步骤 2: 应用设置代码
- 步骤 3: 创建数据库
- 步骤 4: 请求数据库连接
- 步骤 5: 视图函数
- 步骤 6: 模板
- 步骤 7: 添加样式
- 福利: 应用测试
- 模板
- 测试 Flask 应用
- 记录应用错误
- 配置处理
- 信号
- 即插视图
- 应用上下文
- 请求上下文
- 用蓝图实现模块化的应用
- Flask 扩展
- 与 Shell 共舞
- Flask 代码模式
- 大型应用
- 应用程序的工厂函数
- 应用调度
- 使用 URL 处理器
- 部署和分发
- 使用 Fabric 部署
- 在 Flask 中使用 SQLite 3
- 在 Flask 中使用 SQLAlchemy
- 上传文件
- 缓存
- 视图装饰器
- 使用 WTForms 进行表单验证
- 模板继承
- 消息闪现
- 用 jQuery 实现 Ajax
- 自定义错误页面
- 延迟加载视图
- 在 Flask 中使用 MongoKit
- 添加 Favicon
- 数据流
- 延迟请求回调
- 添加 HTTP Method Overrides
- 请求内容校验码
- 基于 Celery 的后台任务
- 部署选择
- mod_wsgi (Apache)
- 独立 WSGI 容器
- uWSGI
- FastCGI
- CGI
- 聚沙成塔
- API
- JSON 支持
- Flask 中的设计决策
- HTML/XHTML 常见问题
- 安全注意事项
- Flask 中的 Unicode
- Flask 扩展开发
- Pocoo 风格指引
- Python 3 支持
- 升级到最新版本
- Flask Changelog
- 许可证
- 术语表