Flask应用未使用其他模块定义的路由

4 投票
1 回答
2994 浏览
提问于 2025-05-01 00:14

我一直搞不定,想用一个模块来创建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

撰写回答