flask实际操刀之多模块分离

上节已经完成了最基本的一个请求相应流程,系统通过127.0.0.1:5000可以正常访问到系统的首页。那么今天我们要来看看多模块分离技术。

  • 问题缘起

各位看官可以看看我们的前端界面,是不是功能很多啊,乱七八糟的,如果按照各个功能去实现,整个系统的功能一定很强大,一定特别有成就感,那么我们就得一个一个的做,那么这些个模块的访问路由就得进行配置,配置在哪里呢?主运行文件app.py中,也对,也不对。对是说明技术上没有问题,但是说不对,就是指最后的app.py将会是一个嗨大的文件,后期的维护管理极其不方便,那么怎么办呢?即要兼顾功能,又要便于维护呢?这就是今天的主题:多模块分离技术。

flask实际操刀之多模块分离

  • 多模块分离所使用的技术

多模块分离需要使用到的技术叫Blueprint(蓝图),其是在被注册到应用之后,所要执行的操作的集合。当分配请求时, Flask 会把蓝图和视图函数关联起来,并生成两个端点之前的 URL。

  • 怎么做
  1. 编制一个Blueprint

明白了问题和目标,下面我们来看看具体怎么用。首先假设我们要开发其中的一个模块,用来进行信息的查询,按照前面我们介绍的知识点,我们可以编制如下代码query4enter.py:

# coding = utf-8
from flask import Blueprint, render_template, request
import dataset
bp4query4enter = Blueprint('query4enter', __name__, template_folder=r'..\\views',static_folder=r'..\\views', static_url_path='')
@bp4query4enter.route("/iniQuery4Enter")
def query4enter():
return render_template('query4enter.html')

通过上面的代码,可以看到bp4query4enter是创建的一个Blueprint实例,它有一些实例化参数,大家可以参照flask的实例化去理解它,也需要指定web模板的位置、静态资源的位置等等。同时为其指定了一个访问请求的路由'/iniQuery4Enter',也就是请求url为iniQuery4Enter时其将执行该rout标注的响应方法。

2.注册Blueprint

在完成一个Blueprint的编制后,剩下的工作就是对其进行注册,使得和主程序一起能协同工作,那么如何进行注册呢:

# coding = utf-8
from flask import *
from query4enter import *
app = Flask(__name__, template_folder=r'..\\views',
static_folder=r'..\\views', static_url_path='')
#注册blueprint
app.register_blueprint(bp4query4enter, url_prefix='/query4enter')
@app.route("/")
def index():
return render_template('index.html')
if __name__ == '__main__':
app.run(port=5000)

看到注释的那句没有app.register_blueprint,flask提供了一个注册blueprint的方法register_blueprint,参数是我们前文创建的blueprint实例以及访问这个blueprint的路由,那么结合前文,那么当系统访问127.0.0.1:5000/query4enter/iniQuery4Enter这个地址时,其中的query4enter将引导访问query4enter.py,然后在根据iniQuery4Enter,找到对应的响应入口,进行处理,进行页面的渲染。怎么样?是不是很简单,也很方便,不过关键还是要好好体味一下blueprint的概念,套用mvc的概念,也就是Control层吧。有了这个最简单的尝试,加入再多的模块也就没有任何问题了。


分享到:


相關文章: