【问题标题】:How do I call one Flask view from another one?如何从另一个调用一个 Flask 视图?
【发布时间】:2014-02-15 22:04:26
【问题描述】:

我在一个蓝图模块中有一个 JSON API,在另一个模块中有一个 Web 前端。

我想通过在前端视图模板中嵌入一些它需要的 JSON 来减少客户端 JS 代码必须发出的一些 AJAX 请求,然后再将其发送到客户端 like in this gist I found

如何从另一个 Flask 视图调用一个 Flask 视图?

我可以直接调用视图函数,但request 会对应“外部”请求,这会混淆被调用的 API 函数。我试过using test_request_context,它几乎可以工作,但我不知道如何保持身份验证(我正在使用 Flask-Login)。

【问题讨论】:

  • 我会采用您用来从 AJAX 调用视图中检索数据的逻辑并将其放入另一个函数中。此功能不应依赖于身份验证。然后,从两个视图中调用该函数。
  • @Mark:这就是我通常所做的,但 JSON 函数依赖于 request 对象来生成分页 URL 和其他一些东西。我不想将它们全部重写以显式传递endpointrequest.args 等。我还需要在生成的 JSON 中使用此分页信息,以便客户端知道如何获取下一页。我同意这不是最优雅的解决方案,但它最适合我。

标签: python flask-login flask


【解决方案1】:

您可以为此使用Flask test client

client = app.test_client()
response = client.get('/your/url', headers=list(request.headers))

要使用 Flask-Login 保持身份验证,您需要传递请求的标头。

感谢Chris McKinnel answering a related question

【讨论】:

  • 工作就像一个魅力!您也可以使用from flask import current_app 并使用 current_app.test_client()
猜你喜欢
  • 2019-05-15
  • 1970-01-01
  • 2017-10-07
  • 1970-01-01
  • 2016-06-24
  • 1970-01-01
  • 2011-06-16
  • 1970-01-01
  • 2016-11-02
相关资源
最近更新 更多