在一个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)
网友185.*.*.2[火星]2022-06-30 06:51
网友216.*.*.226[Seattle]2022-06-30 06:33
网友185.*.*.20[火星]2022-06-30 06:19
网友54.*.*.91[法国]2022-06-30 06:10
很想知道你后台实现是 markdown 还是 tinymce +syntaxhighlight呢,最近开始学djang,想做一个博客,发现自己用的tinymce不是很方便2014-09-11 17:45 回复
发表评论
亲~ 评论内容是必须的哟! o(∩_∩)o
昵称
邮箱
主页
评论