- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经使用请求/应用程序上下文有一段时间了,但没有完全理解它是如何工作的,或者为什么它是这样设计的。当涉及到请求或应用程序上下文时,“堆栈”的目的是什么?这是两个独立的堆栈,还是它们都属于一个堆栈?请求上下文是推送到堆栈上,还是堆栈本身?我可以在彼此之上推送/弹出多个上下文吗?如果是这样,我为什么要这样做?
对于所有问题,我很抱歉,但在阅读了 Request Context 和 Application Context 的文档后,我仍然感到困惑。
最佳答案
多个应用程序
应用程序上下文(及其目的)确实令人困惑,直到您意识到 Flask 可以有多个应用程序。想象一下你想让一个 WSGI Python 解释器运行多个 Flask 应用程序的情况。我们在这里不是在谈论蓝图,而是在谈论完全不同的 Flask 应用程序。
您可以将其设置为类似于 Flask documentation section on "Application Dispatching"例子:
from werkzeug.wsgi import DispatcherMiddleware
from frontend_app import application as frontend
from backend_app import application as backend
application = DispatcherMiddleware(frontend, {
'/backend': backend
})
Flask(...)
应用程序构造函数被调用了两次,创建了一个 Flask 应用程序的两个实例。
from flask import request
request
访问当前请求的信息。显然,
request
不是普通的全局变量;实际上,它是一个
context local值(value)。换句话说,幕后有一些魔法说“当我调用
request.path
时,从 CURRENT 请求的
path
对象中获取
request
属性。”对于
request.path
,两个不同的请求会产生不同的结果。 .
request.path
,每个线程处理不同的请求。并为他们各自的请求获取正确的信息。
request.path
之类的事情)。
from flask import url_for
request
例如,
url_for
函数具有依赖于当前环境的逻辑。然而,在这种情况下,很明显逻辑在很大程度上取决于哪个应用程序被视为“当前”应用程序。在上面显示的前端/后端示例中,“前端”和“后端”应用程序都可以有一个“/登录”路由,因此
url_for('/login')
应该返回不同的内容,具体取决于 View 是在处理前端应用程序还是后端应用程序的请求。
What is the purpose of the "stack" when it comes to the request or application context?
Because the request context is internally maintained as a stack you can push and pop multiple times. This is very handy to implement things like internal redirects.
Are these two separate stacks, or are they both part of one stack?
Is the request context pushed onto a stack, or is it a stack itself?
Am I able to push/pop multiple contexts on top of eachother? If so, why would I want to do that?
app = Flask(__name__)
db = SQLAlchemy() # Initialize the Flask-SQLAlchemy extension object
db.init_app(app)
app
和
db
应从 shell 运行的脚本中的值。例如,“setup_tables.py”脚本...
from myapp import app, db
# Set up models
db.create_all()
app
申请,但在
create_all()
期间它会抛出一个错误,提示没有应用程序上下文。这个错误是有道理的;你从来没有告诉 Flask 在运行
create_all
时它应该处理什么应用程序方法。
with app.app_context()
在 View 中运行类似函数时调用。原因是 Flask 在处理实际 Web 请求时已经为您处理了应用程序上下文的管理。问题实际上只出现在这些 View 函数(或其他此类回调)之外,例如在一次性脚本中使用您的模型时。
from myapp import app, db
# Set up models
with app.app_context():
db.create_all()
app
的应用程序,请记住可能有多个应用程序)。
import unittest
from flask import request
class MyTest(unittest.TestCase):
def test_thing(self):
with app.test_request_context('/?next=http://example.com/') as ctx:
# You can now view attributes on request context stack by using `request`.
# Now the request context stack is empty
关于python - Flask 的上下文堆栈的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20036520/
我正致力于通过 OAuth 合并外部 API,但对 expires_in 属性的用途有点迷惑。通过阅读,应该对 api token 的使用进行防御性编码,因为您应该预料到 token 在任何时候都可能
有人可以概述或总结一下 Spring 框架上下文中 bean 的用途吗? 我了解标准的 Java bean(没有 arg 构造函数、getter/setter,通常是序列化的),但 Spring be
使用 OpenGL 4.1 和 ARB_separate_shader_objects,我们能够在着色器程序中存储着色管道的不同阶段。众所周知,要使用这些,我们需要将它们附加到程序管道对象,然后绑定(
正如我从文档中了解到的那样,“MoveIteratorFactory”的目的是生成每一步都需要执行的 Action 。 “getSize”方法的移动子集有多大? “createOriginalMove
请解释 CMakeLists.txt 中这一行的目的是什么: 包括(InstallRequiredSystemLibraries) 我在 CMake 示例中看到这一行,但找不到好的解释,为什么我需要它
这里是新手。我仍在尝试理解在多个布局中运行单个进程或目的的概念。 例如,我想在我的申请中添加“提交后”功能。有一个包含标题、内容等文本框的主布局,以及一个链接到另一个布局以选择类别的按钮。我的问题是,
我在看 Box Oauth2.0 View Controller : https://github.com/box/box-ios-sdk-v2/blob/master/BoxSDK/OAuth2/B
我编写了一个将字符串复制到系统剪贴板的 Java 应用程序。构造函数使用 Clipboard.setContents(Transferable contents, ClipboardOwner own
阅读此文后:http://sourcemaking.com/design_patterns/command 我还是不太明白为什么我们需要这个。 最佳答案 想法是,如果命令被封装为对象,那么这些命令可以
我知道 c++ 中的模板是做什么的,但是今天我看到了一些奇怪的代码: template <> void swap(foo &a, foo &b) { a.name = b.name; a.
我不太明白 C# Collections 中 IEnumerator 的用途是什么。它的用途是什么,为什么要使用它? 我试着在线查看 http://msdn.microsoft.com/en-us/l
不幸的是,我今天做了一些代码考古(同时重构了一些旧的危险代码)并发现了这样的小化石: # line 7 "foo.y" 能在里面找到如此古老的宝藏,我完全惊呆了。我在 C 编程的网站上阅读了它。然而,
您能否澄清一下此注释的实际用途? - 如果我们没有使用数据库中的 SQL 表定义定义相应的约束,会发生什么情况。当我们尝试插入时,hibernate 会检查唯一性吗?或者这就是DB的目的吗?如果 hi
我在视频教程中看到过这段代码: const navToggle = ["Menu"].join(""); $(".site-header").prepend(navToggle); 我明白它的基本作用
我想知道这个成员函数的 scroll_to(TextBuffer::iterator& iter, double within_margin = 0)参数 within_margin。 API 是这样
我想知道是否可以将子目录提交到目录例如,假设您有 site.com/directory 可以将子目录提交到目录。我即将开始为希望她的网站在搜索引擎中排名靠前的客户进行一些搜索引擎优化。我知道实现此目的
STL 迭代器的用途是什么?为什么程序员要创造这个概念? 最佳答案 迭代器允许您将算法与容器分开。只要您有开始和结束迭代器,并且知道迭代器的功能(随机访问等),您就可以在迭代器指定的范围内进行操作。例
NSData *responseData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&respons
我正在编写代码,使用通用的 linux i2c 驱动程序 linux/i2c-dev.h 实现一个简单的 i2c 读/写功能 我对 ioctl 感到困惑:I2C_SLAVE 内核文档说明如下: You
在尝试克隆可变集合时,我最初的方法是对 mutable.Cloneable 特征使用 clone() 方法。但是,这取决于创建引用副本的 java.Object.clone 实现,而不是深拷贝。通过测
我是一名优秀的程序员,十分优秀!