我有一个Flask应用程序作为后端,为REST API和AngularJS前端应用程序提供服务。
我使用Grunt/Liverload为前端服务,地址为:http://localhost:5000/
在开发过程中,是否可以使用werkzeug的app.run()
或run_simple
在localhost的子url上为Flask应用程序提供服务?具体来说,我想让Flask应用程序访问地址:http://localhost:5000/api
我找到了这个解决方案,但它的缺点是在http://localhost:5000/
提供一个虚拟应用程序,该应用程序使用该地址,不允许我在该地址提供AngularJS应用程序。
Flask和Yoman的设置方式实际上无法做到这一点-可以让两个进程共享同一端口,但通常允许一个主进程将对单个请求的处理传递给子进程,这与您在这里所做的不太一样。(通常,在生产中,您会在像nginx这样的代理服务器后面运行前端和后端。)
幸运的是,你不必为了开发你的应用程序而重新发明轮子或运行单独的代理服务器——有一个名为Grunt connect proxy的Grunt插件,它可以让你将子url的请求代理到另一个位置。这将允许您在不同的端口(例如端口5001)上启动Flask后端服务器,并将对localhost:5000/api
(例如)的代理请求发送到localhost:5001/
:
connect: {
options: {
port: 5000,
hostname: 'localhost'
},
proxies: [
{
context: '/api',
host: '127.0.0.1',
port: 5001,
https: false,
changeOrigin: false,
xforward: false
}
]
}
然后,您可以使用app.run(port=5001)
运行Flask应用程序。
这对我有效
from flask import Flask
prefix = '/abc'
app = Flask(__name__)
# redefine route
def route(path, *args, **kwargs):
return _route(prefix + path, *args, **kwargs)
_route = app.route
app.route = route
# Test function
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()