装饰 Flask RESTful 方法
Decorating a Flask RESTful method
当我使用以下代码转到 127.0.0.1:5111/ 时,我得到一个 null
值:
import logging
from logging import getLogger
import time
logging.basicConfig(level='DEBUG')
class MyDec:
def __init__(self, logger):
self.logger = logger
def __call__(self, f):
def wrapper(*args, **kwargs):
self.logger.info('Started task.')
f(*args, **kwargs)
self.logger.info('Completed task.')
return wrapper
logger = getLogger('My Logger')
from flask import Flask
from flask_restful import Api, Resource
app = Flask('App')
api = Api(app)
class Foo(Resource):
@MyDec(logger)
def get(self):
return 'Hello'
api.add_resource(Foo, '/')
app.run(port=5111, debug=True)
这很好用:
class Foo:
@MyDec(logger)
def bar(self, x, y=3):
print(x, y)
time.sleep(0.5)
foo = Foo()
foo.bar(x=1)
所以 get() 方法在幕后做了一些我似乎无法弄清楚的事情。
装饰器中的 __call__
方法目前没有 return 任何东西,因此它吞噬了 get
中的 return "Hello"
。尝试这样的事情:
def __call__(self, f):
def wrapper(*args, **kwargs):
self.logger.info('Started task.')
data = f(*args, **kwargs)
self.logger.info('Completed task.')
return data
return wrapper
当我使用以下代码转到 127.0.0.1:5111/ 时,我得到一个 null
值:
import logging
from logging import getLogger
import time
logging.basicConfig(level='DEBUG')
class MyDec:
def __init__(self, logger):
self.logger = logger
def __call__(self, f):
def wrapper(*args, **kwargs):
self.logger.info('Started task.')
f(*args, **kwargs)
self.logger.info('Completed task.')
return wrapper
logger = getLogger('My Logger')
from flask import Flask
from flask_restful import Api, Resource
app = Flask('App')
api = Api(app)
class Foo(Resource):
@MyDec(logger)
def get(self):
return 'Hello'
api.add_resource(Foo, '/')
app.run(port=5111, debug=True)
这很好用:
class Foo:
@MyDec(logger)
def bar(self, x, y=3):
print(x, y)
time.sleep(0.5)
foo = Foo()
foo.bar(x=1)
所以 get() 方法在幕后做了一些我似乎无法弄清楚的事情。
装饰器中的 __call__
方法目前没有 return 任何东西,因此它吞噬了 get
中的 return "Hello"
。尝试这样的事情:
def __call__(self, f):
def wrapper(*args, **kwargs):
self.logger.info('Started task.')
data = f(*args, **kwargs)
self.logger.info('Completed task.')
return data
return wrapper