колба питона 404 не найдена - PullRequest
0 голосов
/ 17 апреля 2019

Я новичок в разработке колб, и не могу работать следующее приложение.Я хочу объявить приложение Flask в run.py и импортировать его в другие пакеты, такие как myapp, ниже.Я спроектировал это так потому, что существует более одного независимого приложения / пакета.Я получаю 404 при попытке получить доступ к URL "... / Привет".Где я не прав?Спасибо!

Макет проекта выглядит следующим образом:

├── 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()

Ответы [ 2 ]

1 голос
/ 17 апреля 2019

Вы объявили два экземпляра 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/

Home route

Привет маршрут http://localhost:5000/hello

hello route

Обновление

Согласно Документация 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:

application 1 view

/app2 маршрут от application2:

application 2 view

0 голосов
/ 17 апреля 2019

В вашем коде, я полагаю, вы выполняете run.py в своем приложении фляги. В этом случае ваше приложение НЕ определяет никаких правил маршрутизации. Просто измените и поместите ваш код в один файл, и он станет работоспособным

from flask import Flask
from gevent.pywsgi import WSGIServer
#import myapp

app = Flask(__name__)

@app.route('/hello')
def show_conf2():
    return "Hello, world!"

http_server = WSGIServer(('', 5000), app)
http_server.serve_forever()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...