目录
近期搞了个云服务器,打算部署点练手的东西。想来python部署web应用简单,先搞一个测试下。
Flask搞起
Flask也是一个python下轻量的web开发框架,接下来就上代码
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run()
服务器安装好python环境,命令行python xx.py即可
浏览器打开http://localhost:5000,即可显示网页Hello, World!
就是这么easy
服务器外部访问
服务器内部localhost是可以访问了,接下来需要在公网可以访问就通了
但是,试了下不通。但是服务器内IIS默认的80端口外面的可以访问的;服务器防火墙也没开。
难道默认只能80端口?那就试试修改Flask的端口
app.run(port=80)
结果依旧不行。
好吧,那就问下度娘。
原来是Flask内部机制问题,默认(未指定host)只会监听127.0.0.1(localhost),所以外网是无法访问的。
解决方法,就是设置host=0.0.0.0,即可监听所有网络连接
app.run(host="0.0.0.0")
问题基本找到了,访问一切ok
可动态设置访问端口
这样还有个问题,端口是代码写死的,不方便动态管理。那么可以在运行python脚本的时候动态指定端口,修改后代码
# 导入包
from flask import Flask
import argparse
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
parser = argparse.ArgumentParser(description='start param')
# 端口参数
# 默认5000,可以通过-p设置
parser.add_argument('-p', '--port', type=int, nargs='?',default=5000,
help='set start port')
if __name__ == '__main__':
args = parser.parse_args()
port=args.port
# host=0.0.0.0,就可以所有地址访问,否则只能localhost访问
app.run(port=port, host="0.0.0.0")
代码简要说明:
通过argparse,增加了一个参数-p,也可以输入--port,这样通过运行命令中设置参数,就可以在代码中获取到端口进行,进而实现动态端口。不指定的话,就是默认5000
cmd运行:python xx.py -p=1234
这样即可动态指定运行的端口了
友情提示:云服务器出于安全考虑,可能限制端口访问,如果动态设置了端口不能访问,可以去云服务器控制台,看下端口映射设置。