zoukankan      html  css  js  c++  java
  • flask-restful-装饰器理解

    装饰器

    使用method_decorators添加装饰器

    为类视图中的所有方法添加装饰器

    
      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'}
    

    代码理解原理

    class DemoResource(Resource):
        method_decorators = [decorator1, decorator2]
    
        # for dec in method_decorators:
        #      func = dec(fuc)
        #
        #   get = decorator1(get)
        #   get = decorator2(get)
        # @decorator2
        # @decorator1
        # def get
        #     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
    #
    # get->  decorator2(  decorator1(get)     )
    #     ->  decorator2(   decorator1->wrapper    )
    #     ->  decorator2-> wrapper
    #
    # get() = decorator2-> wrapper()
    #                 decorator1->wrapper()
    #                     get()
        
    

    总结: 装饰器执行顺序是从后至前开始的

  • 相关阅读:
    libcurl在mac上编译
    Kafka入门经典教程
    mac kafka 环境搭建 以及PHP的kafka扩展
    Mac下安装php-memcached扩展
    Mac使用brew安装nginx,并解决端口80访问权限问题
    Git的基本使用汇总整理
    MySQL InnoDB 共享表空间和独立表空间
    VB中如何修改treeview的背景色
    转:Python yield 使用浅析
    设置TreeView背景色
  • 原文地址:https://www.cnblogs.com/jianjunliu/p/14310917.html
Copyright © 2011-2022 走看看