将 Flask 请求注入另一个 Flask 应用程序

2023-12-07

有没有办法将 Flask 请求对象注入到不同的 Flask 应用程序中。这就是我想做的:

app = flask.Flask(__name__)

@app.route('/foo/<id>')
def do_something(id):
  return _process_request(id)

def say_hello(request):
   # request is an instance of flask.Request.
   # I want to inject it into 'app'

我正在尝试使用 Google Cloud Functions,其中say_hello()是由云运行时调用的函数。它接收到一个flask.Request作为参数,我想然后通过我自己的一组路由进行处理。

我尝试了以下方法,但不起作用:

def say_hello(request):
    with app.request_context(request.environ):
        return app.full_dispatch_request()

这会对所有请求响应 404 错误。

Edit:

简单的实现方法say_hello()如下:

def say_hello(request):
    if request.method == 'GET' and request.path.startswith('/foo/'):
        return do_something(_get_id(request.path))
    flask.abort(404)

这本质上需要我自己编写路由匹配逻辑。我想知道是否有办法避免这样做,而是使用 Flask 的内置装饰器和路由功能。

Edit 2:

有趣的是,跨应用程序的调度在本地工作:

app = flask.Flask(__name__)

# Add app.routes here

functions = flask.Flask('functions')

@functions.route('/', defaults={'path': ''})
@functions.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE'])
def catch_all(path):
    with app.request_context(flask.request.environ):
        return app.full_dispatch_request()

if __name__ == '__main__':
    functions.run()

但同样的技术似乎不适用于 GCF。


我不推荐这种方法,但是通过滥用请求堆栈并重写当前请求并重新分派它,这在技术上是可能的。

但是,您仍然需要执行某种类型的自定义“路由”来正确设置url_rule,因为来自 GCF 的传入请求不会包含它(除非您通过请求明确提供它):

from flask import Flask, _request_ctx_stack
from werkzeug.routing import Rule

app = Flask(__name__)

@app.route('/hi')
def hi(*args, **kwargs):
    return 'Hi!'

def say_hello(request):
    ctx = _request_ctx_stack.top
    request = ctx.request
    request.url_rule = Rule('/hi', endpoint='hi')
    ctx.request = request
    _request_ctx_stack.push(ctx)
    return app.dispatch_request()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Flask 请求注入另一个 Flask 应用程序 的相关文章

随机推荐

  • PHP 如何阻止我的网站代理?

    我正在寻找阻止代理进入我的网站的绝对最佳方法 原因是我在项目中使用了唯一的 IP 地址 你会推荐什么 Thanks 不可能完全准确地确定连接到您网站的人是否正在代理其他人的请求 您可以实时合理地做的最好的事情就是寻找X FORWARDED
  • Python Pip 安装版本错误

    我知道这个问题以前曾被问过 但我的问题有点不同 我安装了 pip2 7 并工作 安装了 pip3 4 并工作 使用我的 Python 2 7 和 3 4 版本 但我的 pip2 7 安装在错误的目录中 它安装在 3 4 文件夹中 正如您所看
  • iOS 10 如何设置 UNotificationContent threadIdentifier 进行远程通知

    TL DR 需要在 APNs 通知负载 JSON 中设置什么键来对应threadIdentifier的财产UNNotificationContent目的 例如这 category 键对应于categoryIdentifier财产 iOS 1
  • 使用 libx11 截屏

    我目前正在尝试使用 libx11 截屏 include
  • Ruby 中的 count 方法如何工作?

    我很难理解以下代码段Ruby 文档 a hello world a count lo gt 5 a count lo o gt 2 a count hello l gt 4 a count ej m gt 4 hello world cou
  • 无效的目标版本:推送 Heroku 存储库时为 12

    每当我发生错误时git push heroku master这就是错误 无法在项目后端执行目标 org apache maven plugins maven compiler plugin 3 8 1 compile default com
  • 如何从shopee网站抓取商品?

    我尝试使用 python 来获取产品信息 如名称和价格 但这一次不起作用 即使我通过网络浏览器程序员模式检查html代码来获取类名并尝试使用这个名称来获取我想要的任何东西 但我得到的结果是这样的 我找不到任何项目 class col xs
  • Java 8 中字符串使用多少内存?

    我最近读了很多关于字符串内存分配的文章 但找不到任何与 Java 8 相同的细节 一个String需要多少内存空间 Alexandru Tanasescu 在Java 8中使用 我用的是64位版本 Java7 或更低版本 最小字符串内存使用
  • 在spark-shell中将行拆分为多行

    我已将数据导入到 Spark shell 中的 Spark DataFrame 中 数据填充如下 Col1 Col2 Col3 Col4 A1 11 B2 a b 1 0xFFFFFF A1 12 B1 2 A2 12 B2 0xFFF45
  • Android 使用哪种 HttpURLConnection 实现?

    我正在寻找实际的代码实现connect disconnect in java net URLConnection java java net HttpURLConnection java 在下面的链接中 connect 和disconnec
  • 替换所有地方的字符串,除非它在引号内

    我想全部更换 by D 除非它们在引号内 示例1 Hey man D how re you My friend told me this can t be true 变成 Hey man D how re you D My friend t
  • 需要一个好的正则表达式将 URL 转换为链接,但保留现有链接

    我有大量用户提交的内容 它是 HTML 并且可能包含 URL 其中一些将是 a 已经 如果用户很好 但有时用户很懒 只输入 www something com 或最多http www something com 我找不到合适的正则表达式来捕
  • 如何在剑道日期选择器中将过去的日期显示为禁用日期

    嗨我正在使用Kendo Angular UI 的 Kendo 日期选择器 我使用日期选择器的 min 和 max 属性来限制用户从特定的日期范围中进行选择 但这完全隐藏了超出范围的日期 就像这样 相反 我想将它们显示为禁用状态 就像 2 月
  • WPF DatePicker:什么是最好的? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我需要一个用于 WPF 应
  • R Markdown / rmarkdown 中的回归表 (html/pdf)

    出于发布的目的 我经常需要我的作品的 PDF 和 HTML 版本 包括回归表 并且我想使用 R Markdown 对于 PDF 来说stargazer和texreg包装可以制作出精美的桌子 现在 在尝试生成同样有吸引力的 HTML 输出时
  • 可变大小的对象可能无法初始化

    我有一堂这样的课 class aClass public aClass N 5 void aMemberFunction int nums N 1 2 3 4 5 private const int N 测试代码是 int main aCl
  • Pyqt 选项卡就像 Google Chrome 中一样

    我想让我的 pyqt 应用程序在菜单栏中有选项卡 就像 Google Chrome 一样 有关如何做到这一点的任何建议或简单示例 我确实找到了这些相关链接 http ivan fomentgroup org blog 2009 03 29
  • C++:路由到成员函数的静态函数包装器?

    我尝试了各种设计方法来解决这个问题 但我似乎无法做到正确 我需要公开一些静态函数以用作 C 库的回调函数 但是 我希望实际实现是非静态的 因此我可以使用虚函数并重用基类中的代码 例如 class Callbacks static void
  • 软件自动更新

    我们正在用 C 开发一个基于 Windows 的应用程序 我想为软件提供自动更新 事实上 一旦用户运行该程序 它应该能够通知用户它将从服务器获取最新版本 我们已经使用 Visual Studio 安装程序创建器创建了我们的安装程序 然后软件
  • 将 Flask 请求注入另一个 Flask 应用程序

    有没有办法将 Flask 请求对象注入到不同的 Flask 应用程序中 这就是我想做的 app flask Flask name app route foo