截止目前为止,我们所写的所有视图函数都放在一个文件当中,对于我们开发一个非常小的应用的话,还勉强可以接受,但是在我们真正的开发中,我们可能会需要开发前台应用,后台应用,我们也可能需要操作不同的表,那么,为了便于日后的维护,一般我们会根据不同的功能模块,将文件按功能模块,或者按操作的表的不同来拆分我们的文件到不同的文件当中。下面就仿照真实的开发需求,来模拟一下我们需要解决的问题,已经需要怎么解决。
比如我们要开发一个博客系统,那么一般会分为前台和后台,前台包括:首页、列表页面,详情页面。后台则包括所有文章列表页面,添加文章页面,修改文章页面。那么我们就需要创建以下视图函数:
app.py文件
from flask import Flask
app = Flask(name)
前台首页
@app.route(’/’)
def index():
return ‘index’
前台列表页面
@app.route(’/list’)
def list():
return ‘list’
前台详情页面
@app.route(’/detail’)
def detail():
return ‘detail’
后台所有文章页面
@app.route(’/all’)
def all():
return ‘add’
后台添加文章页面
@app.route(’/add’)
def add():
return ‘add’
后台编辑文章页面
@app.route(’/edit’)
def edit():
return ‘edit’
if name == ‘main’:
app.run()
这就是我们按照之前的思路的一般写法,我们现在看到的只是这几个视图函数,数量还很有限,但是真正开发的时候可不只有这几个视图函数,如果有较多视图函数的话,我们就需要考虑将此文件进行拆分了。比如我们可以将后台的相关试图函数给移到新文件admin.py当中。
app.py文件
from flask import Flask
app = Flask(name)
前台首页
@app.route(’/’)
def index():
return ‘index’
前台列表页面
@app.route(’/list’)
def list():
return ‘list’
前台详情页面
@app.route(’/detail’)
def detail():
return ‘detail’
if name == ‘main’:
app.run()
admin.py文件
后台所有文章页面
@app.route(’/all’)
def all():
return ‘add’
后台添加文章页面
@app.route(’/add’)
def add():
return ‘add’
后台编辑文章页面
@app.route(’/edit’)
def edit():
return ‘edit’
但是这样拆分之后,我们发现又有新的问题了。在admin.py文件当中并没有app,从而导致代码报错。就算我们将app从app.py文件中引入到admin.py中,我们发现启动后,还是依然找不到我们后台的视图函数。
from flask import Blueprint
admin_blue = Blueprint(‘admin’, name)
@admin_blue.route(’/add’)
def add():
return ‘add’
@admin_blue.route(’/delete’)
def delete():
return ‘delete’
@admin_blue.route(’/edit’)
def edit():
return ‘edit’
我们刚才说了,我们把蓝图比作成插座,那么到此为止,我们已经算是把后台的视图函数挂载到了后台的这个插座上,我们接着还需要将这个后台的插座链接到我们的总开关app上,所以,在app.py文件中,我们就需要首先引入一下后台的蓝图,然后再注册到主app上,这样才算将我们的视图函数通过插座联到了我们的主开关上,我们的后台的视图函数才能正常的访问了。代码如下:
from admin import admin_blue # 引入蓝图
app = Flask(name)
app.register_blueprint(admin_blue) # 注册蓝图