【问题标题】:Flask app serve as two different appsFlask 应用程序充当两个不同的应用程序
【发布时间】:2016-04-04 08:30:17
【问题描述】:

我曾使用过 Flask 应用程序,该应用程序用作管理面板和 API。我的管理面板包括登录页面和一堆管理内容。所以我不想把它暴露在互联网上。管理面板应该只能从 Intranet 访问,但是我的 API 应该可以从互联网访问。

我有两台机器。一台是本地机器,另一台将托管在 AWS。问题是两台机器上的代码是相同的,但是一台将用作 API,而另一台将用作管理面板。 我的主管告诉我,我可以使用“Flask 蓝图”来实现我想要做的事情,但我想在开始实施之前确定。

Flask 蓝图可以解决这个问题还是有其他选择?

(想到的一件事是将 API 从管理面板分离到两个不同的 Flask 应用程序中。这很容易做到并解决了所有问题。但是我现在无法做到这一点。)

Image of what I am trying to do

【问题讨论】:

  • 是的,使用 bĺueprints 并根据需要将它们添加到您的应用中。
  • 是的,我同意克劳斯的观点

标签: python rest flask


【解决方案1】:

您可以在蓝图上使用 before_app_request 并检查您的客户端 ip 是否以 192.168 或 10.0 或 172.16 开头

from flask import abort

@blueprint_1.before_request
def check_network():
    if not request.remote_addr.startswith("192.168") or ...:
            abort(404)

编辑:根据蓝图文档 before_app_request 这样的函数在每个请求之前执行,即使在蓝图之外。 改用 before_request(它将在 blueprint_1 Blueprint 上的请求之前执行……我编辑了我的代码……

【讨论】:

  • 感谢您的回答。但是,我认为攻击者仍然可以伪造他/她的 IP 来向我的管理面板发出请求,尽管这不太可能。所以我决定使用这样的代码:if APP.config['APP_TYPE'] == 'panel' APP.register_blueprint(panel) else : APP.register_blueprint(api)
  • 如果您有 2 台物理服务器和一个配置不同的代码,那么您的代码是正确的,但我的代码是使用 1 台服务器并获得您想要的结果。
猜你喜欢
  • 2014-08-21
  • 1970-01-01
  • 1970-01-01
  • 2020-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-09
相关资源
最近更新 更多