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()
        
    

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

  • 相关阅读:
    Android测试AsyncTask下载图片
    Android DatePickerDialog TimepickerDialog
    Android AlertDialog
    Android activity的回传数据
    Android Handler简单使用
    Java Switch(String)
    JAVA测试装饰者模式
    Java实现数组按数值大小排序
    Java参数按值传递?按引用传递
    Spring cloud之断路器hystrix包问题
  • 原文地址:https://www.cnblogs.com/jianjunliu/p/14310917.html
Copyright © 2011-2022 走看看