在Windows上使用Waitress为Flask应用提供服务

29
我能够使用以下代码运行一个Web服务器。

我能够使用以下代码运行一个Web服务器

from flask import Flask
from waitress import serve

app = Flask(__name__, static_url_path='/static')
...
serve(app, port=8080)

问题在于我只能从运行它的那台机器上访问它,如果我尝试使用IPv4 IP访问它,则无法工作。 我漏掉了什么步骤吗?


你尝试将主机设置为0.0.0.0了吗? - johnII
是的,它在NAT路由设备后面,并且连接到同一网络。我正在使用无线局域网适配器Wi-Fi下面标有IPv4地址的那个。 - llulai
你使用的是哪个IP地址?本地地址(可能类似于192.168.1.2或10.x.x.x)还是全局地址(可能从http://whatismyip4.com/获取)?如果要使用全局地址,您需要编辑路由器的配置。此外,您是否考虑过Windows防火墙是否阻止访问? - Robᵩ
我不使用whatismyip4.com提供的IP地址(无论如何,它们都不起作用 :/) - llulai
当我在本地机器上使用本地地址时,它可以工作,但当我在另一台设备上使用时,它就无法工作。 - llulai
显示剩余3条评论
8个回答

64

简单的示例,请试试!
希望它能帮到你。

app1.py

from flask import Flask
app = Flask(__name__)
# app.run(host='0.0.0.0', port=8080,debug=True)

服务员服务器.py

from waitress import serve
import app1
serve(app1.app, host='0.0.0.0', port=8080)

然后运行以下命令

python waitress_server.py 

1
然后你有两个文件在那里。但是该怎么处理呢? - Soren
3
你的意思是如何运行吗?python waitress_server.py - Dondon Jie
嗨,我知道Waitress默认使用4个线程。如果我使用的机器无法处理4个线程,我需要将其设置为更低吗?你知道如何配置吗?谢谢。 - Jun
如果有人输入 https://digital.local 并期望看到网站,这个是如何工作的?在这种特定情况下它是如何工作的? - pee2pee

13

Waitress 现在提供一个简单的命令行工具 waitress-serve 用于运行 Flask 应用程序。请注意,本答案仅适用于 Waitress 1.30。命令行参数可能会在未来更改。

如果你的 Flask 应用程序名为 myapplication,实例化应用程序的方法名为 create_app,那么你可以运行以下命令。这将启动默认监听端口8080的服务器。

  • waitress-serve --call "myapplication:create_app"

如果您希望在端口80 (http)上启动它,那么您只需要执行以下操作:

  • waitress-serve --port=80 --call "myapplication:create_app"
D:\flaskapps>waitress-serve --port 80 --call "dlrlsummarizer:create_app"

Serving on http://ADITHYA-PC:80

服务员提供命令行参数

Flask 1.0 生产部署教程


我使用 waitress-serve --port=5000 main:app - EpixyCoder101
您可以按照以下格式进行格式化: waitress-serve --port=端口号 程序文件:应用程序变量 其中,应用程序变量 是指应用程序变量。 例如,app = Flask(__name__) - EpixyCoder101

7

试着使用

serve(app, host='0.0.0.0', port=8080)

9
please add some explanation - Harsha Biyani

2
from flask import Flask
from waitress import serve

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "<p>Hello stay healthy.</p>"

if __name__ == "__main__":
    serve(app, host="127.0.0.1", port=8080)
  1. 问题可能出现在主机上。您可以在程序中使用 host="127.0.0.1"。
  2. 将您的程序保存在 app.py 文件中。
  3. 运行您的程序。
  4. 服务器将在 http://localhost:8080 上可访问。

只是为了给那些刚接触Python的人添加一些内容。通过上述更改,只需运行python app.py(如果你的文件保存为app.py)。 - undefined

2

我遇到了这个问题,需要寻找类似的东西。 在查看文档并结合您的原始请求后,我进行了测试。

serve(app, port=8080, host="x.x.x.x")

这里的x.x.x.x是我的主机IP地址。在我的环境中,它运行良好。

完整代码如下:

from flask import Flask
from waitress import serve

app = Flask(__name__)
...
serve(app, port=8080, host="x.x.x.x")

1
我意识到这个问题可能基于错误的防火墙或NAT问题,但是如果有人真正想在Windows上正确地(作为服务)提供Flask应用程序和waitress,我想指向我的答案here,以便它可以有用并获得一些反馈。

0

为了能够使用您内部的PC(在路由器后面),您需要在路由器中将外部端口8080转发到内部端口8080和服务器的IP地址。

在这种情况下,您可以使用外部IP从网络外部访问您的服务器。如果您的服务提供商分配的是静态IP地址,则没有问题。如果没有,那么您可以使用免费的DNS提供商(我使用DnsExit),该提供商将为您提供外部IP地址的名称。这样,即使您的服务提供商的IP地址不时更改,您也可以使用名称访问您的服务器。


0
我刚意识到只有在同一网络中的计算机才能访问,而来自网络外部的计算机则不能访问。
你需要在路由器中转发端口并使用公共IP地址。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接