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

 

posted @ 2019-04-24 23:01  无涯(WuYa)  阅读(181)  评论(0编辑  收藏  举报