问题描述
我一直在学习python装饰器,我想知道flask如何将request
变量传递到用路径装饰的函数中。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
print(request)
return 'Hello,World!'
请求如何存在?为什么在编写函数时不必键入def hello_world(request)
?
当我尝试使自己的包装器模仿此类行为时
def wrapper(function):
def wrapped_item(*args,**kwargs):
request = "yes"
function(*args,**kwargs,request=request)
return wrapped_item
@wrapper
def hello_world():
print(request)
hello_world()
它会导致错误TypeError: hello_world() got an unexpected keyword argument 'request'
。但是,当我放置def hello_world(request)
时,它可以正常工作。因此,如何仅拥有def hello_world()
就可以使用它?
解决方法
Flask使用线程本地,这就是“魔术”发生的方式。有关更多信息,请参见https://flask.palletsprojects.com/en/1.1.x/advanced_foreword/和https://werkzeug.palletsprojects.com/en/1.0.x/local/
,这是您导入的变量
from flask import request
您的代码示例不包含它,但是我确定您的文件中包含它。