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)
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')
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')
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)
manager.py 文件中的内容
# # 导入此前写好的蓝图模块 from app01_add import create_app my_app01 = create_app() if __name__ == '__main__': my_app01.run(debug=True,port='8989')
运行manage.py文件就好啦