gpt4 book ai didi

python - Flask 在导入的模块中找不到路由

转载 作者:太空宇宙 更新时间:2023-11-04 08:53:19 29 4
gpt4 key购买 nike

我在使用 Flask 时遇到问题,其中在导入的模块中声明的路由未被注册并且总是导致 404。我在 Python 2.7 上运行最新版本的 Flask。

我有以下目录结构: enter image description hererun.py 有以下代码: 从 flask 导入 flask

app = Flask(__name__)


@app.route('/')
def hello_world():
return 'Hello World!'

import views.home

if __name__ == '__main__':
app.run()

home.py 的代码如下:

from run import app


@app.route('/test')
def test():
return "test"

当我运行 run.py 时,在 home.py ( http://localhost:5000/test ) 中声明的路由总是返回 404,即使 run.py 导入 views.home。在 run.py 中声明的 Root View ( http://localhost:5000) 工作正常。

我写了一个打印所有注册路由的函数,但/test 不在其中 ( get a list of all routes defined in the app )。

知道为什么吗?

最佳答案

我发现将 run.py 中的 import 语句从

import views.home

from views.home import *

一切正常,这让我明白了为什么没有使用 import views.home 注册模块。

基本上,当 run.py 作为脚本运行时,它被赋予名称 __main__ 并且这是在 sys.modules 中赋予模块的名称 ( Importing modules: __main__ vs import as module )

然后,当我从 views.home.py 中的 run.py 导入应用程序时,一个新的 run.py 实例会在 中注册code>sys.modules 名称为 run。此时,run.pyviews.home.py 中对 app 的引用是两个不同的引用,因此未注册路由。

解决方案是将 app 变量的创建从 run.py 移到一个单独的 python 文件中(我称之为 web_app.py ) 导入到 run.py 中。这保证了在 web_app.py 中声明的 Flask app 变量总是在导入 web_app.py 的地方被正确引用。

所以 run.py 现在看起来像这样:

from web_app import app

if __name__ == '__main__':
app.run()

web_app.py 看起来像这样:

from flask import Flask

app = Flask(__name__)

import view.home

关于python - Flask 在导入的模块中找不到路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32874629/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com