阿小信大人的头像
Life is short (You need Python) Bruce Eckel

Combining Flask Applications2014-09-03 03:28

在一个flask app下mount多个可以独立运行的app, 类似blueprint的做法,不过各个子app可以独立运行。

项目结构:

Project1
├── Project1_server.py
├── Project2
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── server.py
│   ├── server.pyc
│   ├── test_server.py
│   └── test_server.pyc
├── Project3
    ├── __init__.py
    ├── __init__.pyc
    ├── server.py
    ├── server.pyc
    ├── test_server.py
    └── test_server.pyc

project1下包含2个子project,project2和project3,都在其init.py中引入其app对象。通过其对象,project1可以访问到2和3的视图,同时project2和project3也是可以脱离这个框架独立运行的。

有两种实现方式,一种是通过project1的add_url_rule,这种方法不好的地方是会在project1中再写一遍子projects视图的url。

Project1_server.py:

from flask import Flask
import project2, project3
import os

app = Flask(__name__)
app.add_url_rule("/project2/path/<task_name>", view_func=project2.func, methods=['POST'])
app.add_url_rule("/project3/path", view_func=project3.func)

if __name__ == '__main__':
    port = int(os.environ.get('PORT', 8088))
    app.debug = True
    app.run(host='0.0.0.0', port=port)

另外一种是通过DispatcherMiddleware:

**Project1_server.py**:

    :::python
    from flask import Flask
    from werkzeug.wsgi import DispatcherMiddleware
    import project2, project3
    import os


app1 = Flask(__name__)

app1.wsgi_app = DispatcherMiddleware(app1.wsgi_app, {
    '/project2': project2.app,
    '/project3': project3.app,
})

if __name__ == '__main__':
    port = int(os.environ.get('PORT', 8088))
    app1.debug = True
    app1.run(host='0.0.0.0', port=port)

如果您觉得从我的分享中得到了帮助,并且希望我的博客持续发展下去,请点击支付宝捐赠,谢谢!

若非特别声明,文章均为阿小信的个人笔记,转载请注明出处。文章如有侵权内容,请联系我,我会及时删除。

#Python#   #flask
分享到:
阅读[1666] 评论[2]

你可能也感兴趣的文章推荐

本文最近访客

网友34.*.*.185[火星]2019-02-19 20:26
网友5.*.*.130[德国]2019-02-19 20:25
网友54.*.*.20[法国]2019-02-19 20:17
网友123.*.*.91[北京]2019-02-19 19:58

发表评论

#1 网友182.*.*.181[成都]530 :
很想知道你后台实现是 markdown 还是 tinymce +syntaxhighlight呢,最近开始学djang,想做一个博客,发现自己用的tinymce不是很方便
2014-09-11 17:45 回复
#2 网友211.*.*.206[厦门]1 回复 #1 网友182.*.*.181[成都] :
用的markdown哈
2014-09-11 19:01 回复