Flask 中的蓝图(BluePrint)

蓝图,听起来就是一个很宏伟的东西

在Flask中的蓝图 blueprint 也是非常宏伟的

它的作用就是将 功能 与 主服务 分开

怎么理解呢?

比如说,你有一个客户管理系统,最开始的时候,只有一个查看客户列表的功能,后来你又加入了一个添加客户的功能(add_user)模块, 然后又加入了一个删除客户的功能(del_user)模块,然后又加入了一个修改客户的功能(up_user)模块,在这个系统中,就可以将查看客户,修改客户,添加客户,删除客户的四个功能做成蓝图加入到客户管理系统中,本篇最后会做一个这样的例子,但是首先我们要搞清楚什么是蓝图 blueprint

 

蓝图结构: 

其实我们可以理解成一个没有run方法的Flask对象,这个理论虽然有很多的漏洞,但是对于刚接触蓝图的你来说,就这么样理解,没有错

下面来看一下,在实例化蓝图的时候可以传递的参数都有什么,你就能完全理解了

如图,这就是我们建立好的一个目录结构,一层一层的看一下,首先是app目录,它就是我们的主应用程序目录了

在这里面有一个__init__.py这个文件里面的内容如下

from flask import Flask

from .views.add_user import add_bp
from .views.del_user import del_bp
from .views.edit_user import edit_bp
from .views.get_user import get_bp


def create_app():
    app = Flask(__name__, template_folder='templates_all', )

    app.register_blueprint(add_bp)
    app.register_blueprint(del_bp)
    app.register_blueprint(edit_bp)
    app.register_blueprint(get_bp)

    return app

由此见得__init__.py就是构建app的一个函数,并且将views中的似乎是蓝图的东西注册进去了

接下来看static目录,这个目录从字面意思就可以理解了,就是我们的static静态文件存放目录了

然后就是templates目录,模板存放目录

 

views中的内容:

from flask import Blueprint, render_template, redirect, request

from S import STUDENT_LIST as S

get_bp = Blueprint('get_bp', __name__)


# 展示页面
@get_bp.route('/show')
def get_user():
    path = request.host_url + 'add'  # 添加
    return render_template('show_page.html', S=S, path=path)
get_user
from flask import Blueprint, render_template, redirect, request

from S import STUDENT_LIST as S

add_bp = Blueprint('add_bp', __name__)


# 添加用户页面
@add_bp.route('/add', methods=['GET', 'POST'])
def add_user():
    if request.method == 'POST':
        username = request.form.get('username')
        age = request.form.get('age')
        gender = request.form.get('gender')
        user_info = {'name': username, 'age': age, 'gender': gender}
        S.append(user_info)

        return redirect('/show')

    return render_template('add_user.html')
add_user
from flask import Blueprint, render_template, redirect, request

from S import STUDENT_LIST as S

del_bp = Blueprint('del_bp', __name__)


# 删除用户页面
@del_bp.route('/del')
def del_user():
    id = request.args['id']
    print(id)
    S.pop(int(id) - 1)

    return redirect('/show')
del_user
from flask import Blueprint, render_template, redirect, request

from S import STUDENT_LIST as S

edit_bp = Blueprint('edit_bp', __name__)


# 编辑用户页面
@edit_bp.route('/edit', methods=['GET', 'POST'])
def edit_user():
    id = int(request.args['id']) - 1
    edit_info = S[id]
    print(edit_info)

    if request.method == 'POST':
        username = request.form.get('username')
        age = request.form.get('age')
        gender = request.form.get('gender')
        user_info = {'name': username, 'age': age, 'gender': gender}
        S[id] = user_info

        return redirect('/show')

    return render_template('add_edit.html', S=edit_info)
edit_user

 

manager.py 文件中的内容

# # 导入此前写好的蓝图模块
from app01_add import create_app
my_app01 = create_app()

if __name__ == '__main__':
    my_app01.run(debug=True,port='8989')

运行manage.py文件就好啦

 

posted @ 2019-02-27 18:01  Niuli'blog  阅读(198)  评论(0编辑  收藏  举报