Flask应用未使用其他模块定义的路由
我一直搞不定,想用一个模块来创建Flask应用对象并运行它,另一个模块来实现视图(路由和错误处理)。这两个模块并没有放在一个Python包里。
app.py
from flask import Flask
app = Flask('graphlog')
import config
import views
if __name__ == '__main__':
app.run(host=config.host, port=config.port, debug=config.debug)
views.py
from app import app
@app.route('/')
def index():
return 'Hello!'
config.py
host = 'localhost'
port = 8080
debug = True
我总是看到Flask默认的“404未找到”页面。不过如果我把view.py
里的内容移动到app.py
里,就能正常工作。这里到底出了什么问题呢?
1 个回答
6
这里有四个模块:
__main__
,这是主脚本,也就是你用来运行的那个文件。config
,从config.py
文件中加载的配置。views
,从views.py
文件中加载的视图。app
,当你使用import app
时,从app.py
中加载的内容。
注意,最后一个模块和第一个模块是分开的!最初的脚本不会被当作app
来加载,Python会把它们视为不同的东西。你有两个Flask
对象,一个是__main__.app
,另一个是app.app
。
创建一个单独的文件作为你脚本的主入口,比如叫run.py
:
from app import app
import config
if __name__ == '__main__':
app.run(host=config.host, port=config.port, debug=config.debug)
然后从app.py
中删除import config
这一行,以及最后的两行。
另外一种方法(虽然看起来不太好),是在views.py
中使用from __main__ import app
。