Flask中的蓝图应用(五)
在前面介绍Flask的应用程序中,所有的应用程序都是写在了app.py的文件中,事实上,在实际的应用中,特别
是独立的开发一个应用,这个应用会有比如登录模块,用户管理模块,以及其他的模块,每个模块的访问地址都是不
一样的。那么也就意味着在Flask的应用程序中,为了实现开发的程序是组件化,或者说是模块化,我们就会使用到
蓝图,蓝图它的作用就可以实现这部分,简单的理解蓝图就是在Flask开发应用程序中,可以使用蓝图分层解耦得到
模块化。这里依然是以Flask项目app为案例,但是在该案例想,增加的模块分别是,登录模块,用户管理模块,后
台管理模块,订单模块,产品管理模块。那么首先在app的应用程序中创建apps的包,在该包下各个模块的应用,
如图所示。
在apps的包下先实现login蓝图的代码,在使用蓝图中首先需要导入Blueprint,具体就以蓝图login模块为案例来
说明这部分,见login蓝图的代码:
#!/usr/bin/env python # -*-coding:utf-8 -*- #Author:无涯 from flask import Blueprint,url_for,redirect,request #初始化蓝图 login=Blueprint('login',__name__,url_prefix='/login') @login.route('/register/') def register(): '''用户注册''' return '注册账户' @login.route('/login/') def newLogin(): '''登录系统''' return '登录系统' @login.route('/profile/') def profile(): '''个人主页''' name = request.args.get('name', None) if name: return '无涯个人主页' else: return redirect(url_for('login.newLogin')),302 @login.route('/exit/') def exit(): '''退出系统''' return 'exit'
app.py模块中的源码为:
from flask import Flask,request,render_template,url_for,redirect,jsonify,abort from flask import make_response from apps.login import * app = Flask(__name__) app.config.from_pyfile('config.py',silent=True) #注册蓝图 app.register_blueprint(login) if __name__ == '__main__': app.run()
关于蓝图中login模块中的代码,有几点需要注意的地方是:在每个蓝图的模块中,实现需要对蓝图进行
初始化的处理,初始化处理的时候可以指定对应模块的访问域名,模板文件,和静态文件你的路径,主
要代码为:
#初始化蓝图 login=Blueprint('login',__name__,url_prefix='/login')
第二就是在蓝图中url_for的应用,特别是蓝图中的调用需要到具体的视图函数,那么就是login.视图函数
的名称,如案例代码中如果没登录成功,就302重定向到/login/login/的地址,见这部分的视图函数代码。
@login.route('/login/') def newLogin(): '''登录系统''' return '登录系统' @login.route('/profile/') def profile(): '''个人主页''' name = request.args.get('name', None) if name: return '无涯个人主页' else: return redirect(url_for('login.newLogin')),302
欢迎关注微信公众号“Python自动化测试”