Python 部署后,是否可以在不重新运行flask服务器的情况下更改flask的代码?

Python 部署后,是否可以在不重新运行flask服务器的情况下更改flask的代码?,python,flask,server,scripting,Python,Flask,Server,Scripting,考虑一下,我部署了一个flask服务器,它可以路由到多个网页。如果我想更改一条路由的内容,通过更改其代码,是否可以在不重新运行flask服务器的情况下在网页中反映这些更改?只要网站url(端口号和路由)不变,就可以在linux服务器或其他flask服务器上托管和重新运行其他脚本 请提出你能想出的任何方法 我的假设是,您希望部署服务能够识别文件中发生的更改,这会提示文件自动重新启动以反映更改,而不是手动重新启动服务 假设您正在生产uWSGI服务器上部署,使用touch reload=/path/t

考虑一下,我部署了一个flask服务器,它可以路由到多个网页。如果我想更改一条路由的内容,通过更改其代码,是否可以在不重新运行flask服务器的情况下在网页中反映这些更改?只要网站url(端口号和路由)不变,就可以在linux服务器或其他flask服务器上托管和重新运行其他脚本


请提出你能想出的任何方法

我的假设是,您希望部署服务能够识别文件中发生的更改,这会提示文件自动重新启动以反映更改,而不是手动重新启动服务

假设您正在生产uWSGI服务器上部署,使用
touch reload=/path/to/folder
启动服务将允许uWSGI在修改或触摸指定的文件/文件夹时重新加载


一种方法是通过
app.run(debug=True)

这种方法的问题是,您的应用程序将通过internet公开,其中包含应用程序的内部调试器

我能想到的一个更好的方法是从不同的文件调用需要频繁更改的函数,而不是从核心flask代码所在的文件调用,并在需要时在该文件中进行更改。这样,您就不需要更改Flask代码,也不需要重新启动应用程序


编辑:

样品瓶路线如下:

从烧瓶导入烧瓶
app=烧瓶(名称)
@应用程序路径(“/”)
def hello_world():
#Route的业务逻辑通常在这里
返回数据
现在,您不必将应用程序的业务逻辑写入与路由相同的文件中,只需将其写入另一个文件中,如下所示,然后将其与路由一起导入到文件中:

使用业务逻辑创建文件

def进程\u hello\u世界(参数):
#在此处编写您希望在不重新加载应用程序的情况下更改的业务逻辑
返回数据
并在应用程序文件中使用路由调用业务逻辑,如下所示:

从烧瓶导入烧瓶
从…起
app=烧瓶(名称)
@应用程序路径(“/”)
def hello_world():
数据=进程\你好\世界()
返回数据

假设您使用的是flask development server

是的,可以使用
use\u reloader=True

从烧瓶导入烧瓶
app=烧瓶(名称)
@应用程序路径(“/”)
def hello_world():
#您可以使用业务逻辑代码
返回一些数据
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
运行(调试=False,主机=0.0.0.0',端口=8000,
使用_reloader=True,threaded=True)

然而,在生产中使用它并不是一个好主意,相关的

设置烧瓶环境将在外壳中为您做一些事情

export FLASK_ENV=development

我认为您只能使用ApacheWebServer来实现这一点。提到 我还没有尝试过,但是当您部署了新代码时,wsgi文件中的任何小更改都会自动重新加载代码

你提到了两个要求

  • 我部署了一个flask服务器 我假设您的意思是它部署在生产环境中。这会自动从开发服务器中排除调试模式,因为
  • 无需重新运行flask服务器 这将排除自动登录,因为这将完全重新启动服务器。在服务器再次准备就绪之前传入的任何请求都将失败

  • 据我所知,如果您执行
    app.run(debug=True)
    @GonzaloHernandez,这是一种方式,但它有漏洞。在启用调试模式的情况下运行Flask应用程序可能会允许攻击者通过Werkzeug调试器获得访问权限。()关于更好的方法,你能举例说明吗?基本的烧瓶代码和不同的文件给我一些时间,我会编辑答案并添加解释
    export FLASK_ENV=development