首页 > 解决方案 > 提前应用带有目标函数 args 的函数,并获取要应用于该目标函数的返回结果

问题描述

我现在用我试图解决的实际情况更新了这篇文章。我正在使用插件和库Flask构建 RESTful api 以使用. 例如,这段代码说明了使用有关用户权限和不记名令牌的信息进行授权的 RPC 请求。flask-restfulpikaRabbitMQ

    def request_authz(self, metadata):
        """
        For an RPC request, the RCP client sends a message with two
        properties (i.e. `reply_to` and `correlation_id`) set to its
        callback queue
        """
        self.response = None
        self.correlation_id = str(uuid.uuid4())

        props = pika.BasicProperties(reply_to=self.callback_queue,
                                     correlation_id=self.correlation_id)

        self.channel.basic_publish(exchange=AMQP_EXCHANGE,
                                   routing_key=BINDING_STATISTICS,
                                   body=json.loads(s=metadata),
                                   properties=props)

        while self.response is None:
            self.conn_broker.process_data_events()
        return self.response

这段代码说明了一个POSTAPI 端点,用于在授权被批准但尚未实现后访问资源。那metadata应该是从 this 获得的参数request

    def post(self):
        items = info(args=request.get_json()['params'])
        return {'data': items}

我想确保所有 api 都应该通过request_authz. 换句话说,所有 api 都应该被response返回request_authz,表明它是否被授权。如何以 pythonic 方式执行此操作(例如使用装饰器)?

标签: pythonflaskrabbitmq

解决方案


您可以将prints 报告给单个函数:

def util(value):
    if value > 0:
        return True
    else:
        return False

def check_value(value, value_type):
    if util(value):
        print('%s is %s' % (value_type, str(value)))
    else:
        print('%s must be positive' % value_type)

def func1(value):
    check_value(value, 'perimeter')

def func2(value):
    check_value(value, 'area')

此外,util函数可以简化为:

def util(value):
    return value > 0

推荐阅读