有没有一种方法可以将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错误。
编辑:
实现的简单方法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的内置装饰器和路由功能。
编辑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()
来自客户端网页的数据作为全局请求对象发送到服务器。要处理请求数据,请求对旬应该从Flask模块导入。 请求对象的重要属性如下所列 - - 它是包含表单参数及其值的键和值对的字典对象。 - 解析问号()后的URL部分查询字符串的内容。 - 保存Cookie名称和值的字典对象。 - 与上传文件有关的数据。 - 当前请求方法。
问题内容: 最初,我尝试将客户端的ajax请求发布到第三方url,但似乎浏览器与此相关的安全问题。我考虑过将ajax发送到服务器端,从那里向第三方发送GET请求,获取响应并将其发送回客户端。我该如何用flask呢? 问题答案: 安装模块(比使用更好),然后定义一个发出必要请求的路由-类似于: 不过,根据你的设置,最好将你的网络服务器配置为在特定URL下将代理反向代理到目标站点。
问题内容: 我的Flask应用程序必须进行大量计算才能获取特定页面。在Flask执行该功能时,其他用户无法访问该网站,因为Flask忙于进行大量计算。 有什么方法可以使我的Flask应用程序接受来自多个用户的请求? 问题答案: 是的,将应用程序部署在其他WSGI服务器上,请参阅Flask部署选项文档。 Flask随附的服务器组件实际上仅用于开发应用程序时;即使可以将其配置为处理并发请求(从Flas
问题内容: 我正在用Flask构建一个应用程序,但是我对WSGI并不太了解,它是基于HTTP的Werkzeug。当我开始使用gunicorn和4个工作进程处理Flask应用程序时,这是否意味着我可以处理4个并发请求? 我的意思是并发请求,而不是每秒的请求或其他任何请求。 问题答案: 运行开发服务器时,你将运行,你将获得一个同步过程,这意味着一次最多处理1个请求。 通过在默认配置下将Gunicorn
作为本书的第一个示例,也可能是你接触的第一个 Flask 应用,我还是以程序届常规的 Hello World 为例来编写一个非常简单的例子。 这个例子的功能就是你在浏览器中输入URL: http://localhost:5000 然后,你就可以在浏览器中看到: Hello World! Simple Flask App 首先,我们先来看一个简短的代码 #!/usr/bin/env python #
问题内容: 我正在写一个基于烧瓶的小型站点,我想使用Ajax将数据从客户端发送到服务器。到目前为止,我仅使用Ajax请求从服务器检索数据。这次我想通过POST请求提交数据。 这是烧瓶侧的接收器,我将其简化为仅记录一条消息,以避免在此路由的实现中出现任何不必要的错误: 提交ajax请求时,flask给了我400错误 我也可以在浏览器的Web开发人员控制台中看到这一点 为什么flask不使用请求中提供