概述
在之前的讲解中,只用一个.py文件,当web应用功能较多,代码越来越多时,将代码都写在一个.py文件,显然是不合理的。
模块化开发
模块化在工业中很常见,比如台式机,买来匹配的主板、CPU、内存、硬盘、显卡、机箱、显示器等,即可组装成一台电脑
软件模块化也是如此,比如将商城分为以下几个模块:商品模块、用户模块、商家模块、评价模块、管理员模块等,每个模块自成一个体系,由不同的程序员开发
蓝图
在Flask中,蓝图可以实现web应用的 模块化 开发,一个蓝图定义了可用于单个应用的视图,模板,静态文件等等的集合。
感性认识
子模块
创建admin.py文件,代码如下:
#coding=utf-8
from flask import Blueprint,render_template
'''
定义蓝图
'''
admin=Blueprint('admin',__name__,url_prefix='/admin')
@admin.route('/')
def index():
return render_template('admin/index.html')
注册蓝图
在.py主文件中增加如下代码:
#coding=utf-8
from admin import admin
app.register_blueprint(admin)
测试
在启动服务的代码改成如下:
if __name__ == "__main__":
print(app.url_map )
print('*'*50)
print(app.view_functions)
app.run(debug=True)
运行.py文件,查看打印的url_map
和view_functions
,如下:
Map([<Rule '/product' (GET, OPTIONS, HEAD) -> product>,
<Rule '/admin/' (GET, OPTIONS, HEAD) -> admin.index>,
<Rule '/login' (POST, OPTIONS) -> login>,
<Rule '/' (GET, OPTIONS, HEAD) -> index>,
<Rule '/static/<filename>' (GET, OPTIONS, HEAD) -> static>])
**************************************************
{'static': <bound method _PackageBoundObject.send_static_file of <Flask 'server'>>, 'admin.index': <function index at 0x03ED3300>, 'index': <function index at 0x033B1CD8>, 'product': <function product at 0x03ED3348>, 'login': <function login at 0x03ED33D8>}
能够查看到蓝图中的 路由 和 视图函数。
注意: 蓝图中的路由url是有前缀/admin
的,endpoint也是有前缀admin
的
浏览器访问
打开浏览器访问蓝图中的url,http://127.0.0.1:5000/admin/
,注意蓝图admin中的路由是有前缀的