python - Flask 如何在没有我将请求作为参数的情况下通过装饰器传递请求变量?
问题描述
我一直在学习 python 装饰器,我想知道烧瓶如何将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 使用 Thread Local,这就是“魔法”发生的方式。有关更多信息,请参见https://flask.palletsprojects.com/en/1.1.x/advanced_foreword/和https://werkzeug.palletsprojects.com/en/1.0.x/local/
推荐阅读
- php - Mysql绑定:元素个数不匹配
- matplotlib - 如何覆盖 mpl_toolkits.mplot3d.Axes3D.draw() 方法?
- cassandra - Cassandra 写入时间主键
- android - Google Play 管理中心 - 发生意外错误。请再试一次。(4ED07195)
- swiftui - 如何使 .resizeable() 有条件?
- r - 在 R 中生成条件汇总统计?
- android - 我的应用程序在 android studio 中没有错误,但在 android 手机上的实际测试中它卡住了
- android - 来自 dumpsys 中列出的显示的 adb screenrecord 辅助显示
- c# - 如何更新设置键的ac#字典,嵌套foreach循环中的值为空
- reactjs - React native Axios Django - Csrf failed referer checks failed no referer