在使用flask进行一个项目编写的时候,可能会有许多个模块,如一个网站的前台(home)和后台(admin)模块,如果把这两个模块都放在一个views.py文件之中,那么最后views.py文件必然臃肿不堪,并且不易维护,因此flask中便有了blueprint的概念,可以分别定义模块的视图、模板、视图等等,我们可以使用blueprint进行不同模块的编写,不同模块之间有着不同的静态文件、模板文件、view文件,十分方便代码的维护和管理。示例如下:
目录结构:
admin下__init__.py和views.py
__init__.py
#!/usr/bin/env python
#-*-coding:utf-8-*-
##定义蓝图
from flask import Blueprint
adminbapp = Blueprint("admin",__name__) #adminbapp为蓝图的名称,不能和模块名称相同,否则会报错
import admin.views
views.py
#!/usr/bin/env python
#-*-coding:utf-8-*-
from . import adminbaqq #.可以理解为__init__.py
@adminbapp.route()
def index():
return "admin.index"
home下__init__.py和views.py
__init__.py
#!/usr/bin/env python
#-*-coding:utf-8-*-
##定义蓝图
from flask import Blueprint
homebapp = Blueprint("admin",__name__) #home为蓝图的名称
import home.views
views.py
#!/usr/bin/env python
#-*-coding:utf-8-*-
from . import home
@homebapp.route()
def index():
return "home.index"
注册蓝图对象(主程序文件,本例为movie_project文件)
from flask import Flask
app = Flask(__name__) #实例化flask
app.debug = True
#导入蓝图对象(from 文件夹 import 定义的蓝图名称(本例在_init__中定义的))
from admin import adminbap as admin_blueprint
from home import homebapp as home_blueprint
#注册(对象名称(蓝图名称),url前缀)
app.register_blueprint(home_blueprint) #前台首页不需要设置后缀
app.register_blueprint(admin_blueprint,url_prefix='/admin') #后台登录设置一下前缀
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
编写入口脚本(可有可无)
manage.py
#!/usr/bin/env python
#-*-coding:utf-8-*-
from movie_project import app #从movie_project中导入app,也可以写成__init__.py
if __name__ == '__main__':
app.run()