python - 找不到python烧瓶404
问题描述
我是烧瓶开发的新手,无法使用以下应用程序。我希望在 run.py 中声明 Flask 应用程序,并将其导入其他包中,例如下面的 myapp。我这样设计是因为有不止一个独立的应用程序/包。尝试访问 url “.../hello”时出现 404。我哪里错了?谢谢!
项目布局如下所示:
├── myapp
│ ├── __init__.py
│ └── myapp.py
└── run.py
myapp/__init__.py 包含:
from flask import Flask
my_app = Flask(__name__)
from . import myapp
myapp/myapp.py 包含:
from run import app
@app.route('/hello')
def show_conf2():
return "Hello, world!"
run.py 包含:
from flask import Flask
from gevent.pywsgi import WSGIServer
import myapp
@app.route('/')
def index():
return 'Home route.'
app = Flask(__name__)
http_server = WSGIServer(('', 5000), app)
http_server.serve_forever()
解决方案
您已经声明了两个实例Flask
,一个在__init__.py
,另一个在run.py
。
Flask 官方文档有一个关于如何在多个模块中分解更大的应用程序的教程。
我已经更新了您的代码、文件名和文件夹结构。
文件夹结构:
├── application
│ ├── __init__.py
│ └── views.py
├── requirements.txt
└── run_application.py
run_application.py
:
from flask import Flask
from gevent.pywsgi import WSGIServer
from application import app
http_server = WSGIServer(('', 5000), app)
http_server.serve_forever()
application/__init__.py
:
from flask import Flask
app = Flask(__name__)
import application.views
application/views.py
:
from application import app
@app.route('/')
def index():
return 'Home route.'
@app.route('/hello')
def hello():
return 'Hello World!'
requirements.txt
:
Click==7.0
Flask==1.0.2
gevent==1.4.0
greenlet==0.4.15
itsdangerous==1.1.0
Jinja2==2.10.1
MarkupSafe==1.1.1
Werkzeug==0.15.2
运行命令:
python run_application.py
输出:
- 回家路线
http://localhost:5000/
- 你好路线
http://localhost:5000/hello
更新
Flask 使用蓝图的概念来制作应用程序组件并支持应用程序内或跨应用程序的常见模式。
更新了代码以方便blueprints
.
更新的目录结构:
├── application1
│ ├── __init__.py
│ └── routes.py
├── application2
│ ├── __init__.py
│ └── routes.py
├── apps.py
└── requirements.txt
apps.py
:
from flask import Flask
from gevent.pywsgi import WSGIServer
from application1.routes import application1_blueprint
from application2.routes import application2_blueprint
app = Flask(__name__)
app.register_blueprint(application1_blueprint)
app.register_blueprint(application2_blueprint)
http_server = WSGIServer(('', 5000), app)
http_server.serve_forever()
application1/__init__.py
: 空白文件
application1/routes.py
:
from flask import Blueprint
application1_blueprint = Blueprint('application1', __name__)
@application1_blueprint.route('/app1')
def application1_index():
return 'Home route for application1'
@application1_blueprint.route('/hello1')
def hello1():
return 'Hello World from application1!'
application2/__init__.py
: 空白文件
application2/routes.py
:
from flask import Blueprint
application2_blueprint = Blueprint('application2', __name__)
@application2_blueprint.route('/app2')
def application2_index():
return 'Home route for application2'
@application2_blueprint.route('/hello2')
def hello2():
return 'Hello World from application2!'
输出:
/app1
路线来自application1
:
/app2
路线来自application2
:
推荐阅读
- twitter-bootstrap - Bootstrap 4 导航栏没有正确排列
- python - 无法将 Python socketio 服务器连接到节点 js socketio 客户端
- c++ - 将对象指针传递给通过引用接受对象的函数的正确方法是什么?
- python - 大写单词的计数百分比
- python - 在 Python 中加入两个列表
- python - product_list() 得到了一个意外的关键字参数“product_id”
- android - 在 MVVM 架构中使用 DialogFragment 的正确方法是什么?
- javascript - 为什么返回结果为假?(在javascript函数中)
- swift - swiftUI 中的选取器正在从 Firestore 中选择文档 ID 而不是文档字段
- javascript - 在浏览器选项卡开关上重新播放 CSS 过渡。我怎样才能解决这个问题?