UDN-企业互联网技术人气社区

板块导航

浏览  : 982
回复  : 0

[讨论交流] 大型应用

[复制链接]
白青青的头像 楼主
发表于 2016-5-19 14:44:19 | 显示全部楼层 |阅读模式
  对于大型应用来说使用包代替模块是一个好主意。使用包非常简单。假设有一个小应用如 下:
  1. /yourapplication
  2.     /yourapplication.py
  3.     /static
  4.         /style.css
  5.     /templates
  6.         layout.html
  7.         index.html
  8.         login.html
  9.         ...
复制代码

  简单的包¶

  要把上例中的小应用装换为大型应用只要在现有应用中创建一个名为 yourapplication 的新文件夹,并把所有东西都移动到这个文件夹内。然后把 yourapplication.py 更名 为 __init__.py 。(请首先删除所有 .pyc 文件,否则基本上会出问题)

  修改完后应该如下例:
  1. /yourapplication
  2.     /yourapplication
  3.         /__init__.py
  4.         /static
  5.             /style.css
  6.         /templates
  7.             layout.html
  8.             index.html
  9.             login.html
  10.             ...
复制代码

  但是现在如何运行应用呢?原本的 python yourapplication/__init__.py 无法运行 了。因为 Python 不希望包内的模块成为启动文件。但是这不是一个大问题,只要在 yourapplication 文件夹旁添加一个 runserver.py 文件就可以了,其内容如下:
  1. from yourapplication import app
  2. app.run(debug=True)
复制代码

  我们从中学到了什么?现在我们来重构一下应用以适应多模块。只要记住以下几点:

  Flask 应用对象必须位于 __init__.py 文件中。这样每个模块就可以安全地导入 了,且 __name__ 变量会解析到正确的包。

  所有视图函数(在顶端有 route() 的)必须在 __init__.py 文件中被导入。不是导入对象本身,而是导入视图模块。请 在应用对象创建之后 导入视图对象。
  1. __init__.py 示例:

  2. from flask import Flask
  3. app = Flask(__name__)

  4. import yourapplication.views
复制代码

  views.py 内容如下:
  1. from yourapplication import app

  2. @app.route('/')
  3. def index():
  4.     return 'Hello World!'
复制代码

  最终全部内容如下:
  1. /yourapplication
  2.     /runserver.py
  3.     /yourapplication
  4.         /__init__.py
  5.         /views.py
  6.         /static
  7.             /style.css
  8.         /templates
  9.             layout.html
  10.             index.html
  11.             login.html
  12.             ...
复制代码

  回环导入

  回环导入是指两个模块互相导入,本例中我们添加的 views.py 就与 __init__.py 相互依赖。每个 Python 程序员都讨厌回环导入。一般情况下回环导入是个坏主意,但 在这里一点问题都没有。原因是我们没有真正使用 __init__.py 中的视图,只是 保证模块被导入,并且我们在文件底部才这样做。

  但是这种方式还是有些问题,因为没有办法使用装饰器。要找到解决问题的灵感请参阅 大型应用 一节。

  使用蓝图

  对于大型应用推荐把应用分隔为小块,每个小块使用蓝图辅助执行。关于这个主题的介绍 请参阅 使用蓝图的模块化应用 一节 。

相关帖子

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部