在使用flask进行一个项目编写的时候,可能会有许多个模块,如一个普通的互联网sass云办公应用,会有用户管理、部门管理、帐号管理等模块,若是把全部的这些模块都放在一个views.py文件之中,那么最后views.py文件必然臃肿不堪,而且极难维护,所以flask中便有了blueprint的概念,能够分别定义模块的视图、模板、视图等等,咱们可使用blueprint进行不一样模块的编写,不一样模块之间有着不一样的静态文件、模板文件、view文件,十分方便代码的维护和管理,下面就是使用blueprint来进行上面用户管理、部门管理、帐号管理模块的模拟编写,只涉及到api层面上,模板文件和静态文件就不写在上面了。javascript
二、分模块后的结构java
在进行分模块编写接口以后,之前提供的接口就不能写在一个views.py文件之中,具体结构以下所示:json
其余的和以前的相似。flask
三、业务模块api
3.1 dept模块数组
__init__.py: # coding:utf-8 from flask import Blueprint
#下面两行的顺序不能颠倒,要先定义蓝图,再导入 dept = Blueprint('dept', __name__,) from app.dept import views
在这里,咱们定义了dept blueprint对象,便于在views.py文件中应用,替代Flask对象。主要的接口 views.py:sass
# coding:utf-8 from app.dept import dept from flask import jsonify import json dept_data = [ { 'name': '部门1', 'id': 12345 }, { 'name': '部门2', 'id': 12346 } ] @dept.route('/<int:id>', methods=['GET', ]) def get(id): for dept in dept_data: if int(dept['id']) == id: return jsonify(status='success', dept=dept) return jsonify(status='failed', msg='dept not found') @dept.route('/depts', methods=['GET', ]) def get_depts(): data = { 'status': 'success', 'depts': dept_data } return json.dumps(data, ensure_ascii=False, indent=1)
提供两个接口,一个接口用于查询特定的部门,一个接口用于返回部门列表,dept对象我是模拟的部门数组,没有用models.py文件中dept对象,主要是在这一节中没有使用相应的orm框架,所以就没写相应的model,这个在随后中会涉及到。app
另一个,我在获取depts接口时,用的就不是jsonify方法了,而是内置的json.dumps转换为json对象,我之因此这样写,是由于jsonify若是要返回数组对象的话,必需要相应的对象实现一个方法返回json数据,或者将这个对象转成字典类型,而后循环遍历这个对象,比较麻烦,所以这里我就直接使用json.dumps来进行转换了。框架
在相应的路由注解上,我使用的就是dept.route,所以在定义了为dept的blueprint对象后,这里的做用至关于当初定义的app Flask对象,但实际上是进行了view层的路由后,最终仍是注册到了app上面,在代码层面上实现了不一样模块之间的隔离。模块化
user模块功能和代码大部分和dept相同,这里仅仅只贴出代码,再也不描述具体的功能。
__init__.py: # coding:utf-8 from flask import Blueprint user = Blueprint('user', __name__,) from app.user import views
views.py:
# coding: utf-8 from app.user import user from flask import jsonify import json user_data = [ { 'id': 1, 'name': '张三', 'age': 23 }, { 'id': 2, 'name': '李四', 'age': 24 } ]
@user.route('/<int:id>', methods=['GET', ]) def get(id): for user in user_data: if user['id'] == id: return jsonify(status='success', user=user) @user.route('/users', methods=['GET', ]) def users(): data = { 'status': 'success', 'users': user_data } return json.dumps(data, ensure_ascii=False, indent=1)
最终Blueprint对象在run文件之中进行注册,以下:
# coding:utf-8 from app import app from app.dept import dept from app.user import user app.register_blueprint(user, url_prefix='/user') app.register_blueprint(dept, url_prefix='/dept') if __name__ == '__main__': app.run()
app.register_blueprint在这里进行了Blueprint对象的注册和路由,在这里还有许多用法,如制定静态文件夹和模板文件夹等等,这些能够参考如下本身学习:使用蓝图的模块化应用
其余的我就没有再讲了,config.py和manager.py在这些简单的应用中还无需用到,讲到后面再来讲这些的做用。
四、运行
启动run文件,进行运行,请求
http://localhost:5000/user/
结果:
第一个接口请求成功:
请求第二个接口:
http://localhost:5000/user/users
接口一样请求成功,在这里dept模块就不去请求,结果是相似的。