首页 > 解决方案 > 找不到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()

标签: pythonflask

解决方案


您已经声明了两个实例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

输出

  1. 回家路线http://localhost:5000/

回家路线

  1. 你好路线http://localhost:5000/hello

你好路线

更新

根据Blueprints 上的 Flask 文档

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

应用程序 1 视图

/app2路线来自application2

应用程序 2 视图


推荐阅读