flask 控制器分离(蓝图)应用
2017-07-03
flask 应用
在之前一篇文章( https://www.u3v3.com/ar/1317 )里, 我们描述了简单的flask应用创建,
结构如下
run.py
templates
└── hello.html
run.py
中
from flask import Flask
from flask import render_template # 加载视图模块
app = Flask("Test")
@app.route('/')
def hello():
return 'hello world'
@app.route('/hello')
def show_page():
return render_template('hello.html') # 加载视图
if __name__ == '__main__':
app.run(port=9999)
hello.html
里
<h1>Yi_Zhi_Yu</h1>
现在, 我们的控制代码都放在run.py
里, 项目小问题不大, 但项目大的时候, 所有控制代码放在一个模块文件里, 就不太好了
蓝图模块化
在 flask 应用里, 我们可以用蓝图的特性来组织控制代码, 将其模块化
新结构如下
├── handlers
│ └── test.py
├── run.py
├── templates
│ └── hello.html
└── urls.py
我们新加了handlers.test
, 作为模块化的控制器,
新加urls
模块, 作为蓝图组织模块
run.py
中, 我们改为如下
from flask import Flask
app = Flask("Test")
import urls
urls.app_routers(app)
if __name__ == '__main__':
app.run(port=9999)
urls.py
如下
from handlers.test import test
def app_routers(app):
app.register_blueprint(test)
handlers.test
模块内
from flask import Blueprint, render_template
test = Blueprint('test', __name__)
@test.route('/')
def hello():
return 'hello world'
@test.route('/hello')
def show_page():
return render_template('hello.html') # 加载视图
注意, 我们在urls.py
里, 将模块化的控制器(test.py
)格式注册到了蓝图中,
依照这种模式, 我们就可以将其他的控制器置于不同的模块中, 方便于构建大型的应用