4. 项目结构与蓝图

项目结构与蓝图

蓝图

请添加图片描述

  • 定义

    ​ 在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'}
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

(initial)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值