条件激活Flask(Werkzeug)调试器?

时间:2013-06-23 06:41:36

标签: python debugging ip flask

我即将部署Flask应用程序,由于内置调试器非常好,我想知道是否可以在生产环境中使用它。

因此,我一直在寻找一种激活调试器的条件方式,仅针对来自特定IP的请求,或仅针对在cookie中具有特殊密码(或满足两个代码)的请求。

我想没有内置的方法可以做到这一点,因此我很想知道我应该在哪里挖掘这个。也许有可能修补Flask来做它? 如果这是一个坏主意 - 请告诉我原因。

2 个答案:

答案 0 :(得分:2)

很可能通过黑客攻击Werkzeug的DebuggedApplication类来启用或禁用调试器(参见源代码here)。

但这是一个糟糕的主意。这是一个生产系统,在您调试问题的同时,真正的用户将通过不同的线程或进程与应用程序进行交互。可能发生的一些事情:

  • Werkzeug的调试器很可能在开发服务器内部进行了测试。在多进程或多线程服务器下使用时,它可能有效,也可能无效。
  • 在调试问题时,会有真实的用户在不同的进程或线程上与应用程序进行交互,可能会改变您下面的应用程序状态,这可能会影响您的调试。
  • 在调试问题时,您可能会无意中以影响当前使用系统的其他用户的方式更改应用程序的状态。

答案 1 :(得分:0)

正如@Miguel所指出的,这对于生产环境来说不是一个好主意,但是为了黑客攻击,这就是你可以做到的。

class CustomDebuggedApplication(DebuggedApplication):
    def __call__(self, environ, start_response):
        # Note, this line can check whatever you want.  A cookie, a query string param, a header.  But don't read the post form body.  If you do, it is gone and can't be used later.
        if not request.args.get('secret', False) == 'Foo' and not request.args.get('__debugger__', False):
            return self.app(environ, start_response)
        return super(CustomerDebuggedApplication).__call__(environ, start_response)