4. 项目结构与蓝图_(initial)的博客-爱代码爱编程
项目结构与蓝图
蓝图
-
定义
在Flask中, 蓝图(蓝本)(blueprint)是一种用来扩展已有Flask应用结构的方式, 蓝图提供了一种把功能类似的视图函数组合在一起的方式, 通过这种方式, 开发者能够把他们的应用拆分成不同的组件. 在我们的架构中, 蓝图的作用类似于控制器(controller).
-
如何使用
-
创建一个蓝图对象
from flask import Blueprint users_bp = Blueprint('users', __name__)
-
在这个蓝图对象上进行操作, 注册路由, 指定静态文件夹, 注册模板过滤器
@users_bp.route('/index') def indext(): return 'users bp response'
-
在应用对象上注册蓝图对象
# 3.注册蓝图 from flask import Flask # 导入蓝图 from apps.users_bp import users_bp # 创建Flask实例 app = Flask(__name__) # 注册蓝图 app.register_blueprint(users_bp) if __name__ == '__main__': # 查看路由映射 print(app.url_map) app.run()
-
初识 flask-script
-
安装配置与第一个restful测试
pip install flask-restful
-
基本使用
-
导入Api与Resource, api用于创建api对象, Resource用于类视图的形式实现
from flask_restful import Api, Resource
-
创建api对象
api = Api(app)
-
自定义视图类, 必须继承Resource
class IndexResource(Resource): pass
-
视图类中定义请求方法
class IndexResource(Resource): # 4.在视图类中定义请求方法 def get(self): # 返回响应 return 'first restful api'
-
使用api对象添加路由
api.add_resource(IndexResource, '/index', endpoint='index')
-
-
Flask-RESTful配合蓝图
-
基本流程
# Flask-RESTful配合蓝图: 1.创建蓝图文件, 编写蓝图代码: - 创建蓝图对象 - 创建蓝图api接口对象 - 编写蓝图的视图类 - 给蓝图视图添加路由 2.创建主程序, 编写主程序代码: - 导入蓝图对象, 用于后续的注册 - 创建Flask实例对象 - 创建Flask实例的api对象 - 注册蓝图 - 程序入口
-
代码
# users_bp.py: 蓝图编码 from flask import Blueprint from flask_restful import Api, Resource # 创建蓝图对象 users_bp = Blueprint('users', __name__) # 创建接口api对象 api = Api(users_bp) # 创建蓝图视图 class IndexResource(Resource): def get(self): return 'users_bp.api' # 添加蓝图路由 api.add_resource(IndexResource, '/index', endpoint='index')
# 主程序编码 from flask import Flask from flask_restful import Api, Resource # 导入蓝图 from apps.users_bp import users_bp app = Flask(__name__) api = Api(app) # 注册蓝图 app.register_blueprint(users_bp) if __name__ == '__main__': # 查看路由映射 print(app.url_map) app.run()
-
视图类的装饰器
-
所有方法添加装饰器
# 给视图类中的所有方法加装饰器 def decorator1(func): def wrapper(*args, **kwargs): print('decorator1') return func(*args, **kwargs) return wrapper def decorator2(func): def wrapper(*args, **kwargs): print('decorator2') return func(*args, **kwargs) return wrapper class DemoResource(Resource): method_decorators = [decorator1, decorator2] def get(self): return {'msg': 'get view'} def post(self): return {'msg': 'post view'}
-
为单个方法指定装饰器
# 指定方法加指定装饰器 class DemoResource(Resource): method_decorators = { 'get': [decorator1, decorator2], 'post': [decorator1] } # 使用了decorator1 decorator2两个装饰器 def get(self): return {'msg': 'get view'} # 使用了decorator1 装饰器 def post(self): return {'msg': 'post view'} # 未使用装饰器 def put(self): return {'msg': 'put view'}