我即将部署Flask应用程序,由于内置调试器非常好,我想知道是否可以在生产环境中使用它。
因此,我一直在寻找一种激活调试器的条件方式,仅针对来自特定IP的请求,或仅针对在cookie中具有特殊密码(或满足两个代码)的请求。
我想没有内置的方法可以做到这一点,因此我很想知道我应该在哪里挖掘这个。也许有可能修补Flask来做它? 如果这是一个坏主意 - 请告诉我原因。
答案 0 :(得分:2)
很可能通过黑客攻击Werkzeug的DebuggedApplication
类来启用或禁用调试器(参见源代码here)。
但这是一个糟糕的主意。这是一个生产系统,在您调试问题的同时,真正的用户将通过不同的线程或进程与应用程序进行交互。可能发生的一些事情:
答案 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)