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)格式注册到了蓝图中,

依照这种模式, 我们就可以将其他的控制器置于不同的模块中, 方便于构建大型的应用