Приложение Flask не распознает новые маршруты, которые я добавляю

У меня возникли проблемы с приложением Flask, которое я пытаюсь запустить.

Когда я делаю вызов этого сервера (URL-адрес указывает на локальный хост сервера, например http://localhost:5000/[FLASK_ROUTE]), приложение Flask создается с помощью сценария (main.py), который выглядит следующим образом :

from flask import Flask
from routes_en import spacy_en_api

app = Flask(__name__)

app.register_blueprint(spacy_en_api)

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

который затем направляется в другой файл (routes_en.py), который выглядит следующим образом:

from flask import Blueprint
from flask import request
from flask import jsonify

import spacy

nlp = spacy.load('en')

spacy_en_api = Blueprint('spacy_en_api', __name__)

@spacy_en_api.route("/[MY_CUSTOM_ROUTE]", methods=['POST'])
def [MY_CUSTOM_ROUTE]():
data["output"] = "test - it works"
return jsonify(data)

@spacy_en_api.route("/en_parse_text", methods=['POST'])
def en_parse_text():
# code here

где «en_parse_text» — это код, написанный кем-то до меня. Эта часть сценария работает нормально при вызове (http://localhost:5000/en_parse_text возвращает ожидаемый результат).

Однако когда я вставляю новый маршрут (MY_CUSTOM_ROUTE), я не получаю никаких результатов. Когда я проверяю журналы, он читает «127.0.0.1 — — [ДАТА] «POST/MY_CUSTOM_ROUTE HTTP/1.1 404 —».

Более того: если я пишу новый код в существующем маршруте (например, я заменяю «# код здесь» на «print(»testing»), вызов Curl возвращает не мой код, а код, который я заменил/закомментировал.

Также может быть важно: версия Flask — 1.1.1/Python 3.7.3/Werkzueg 0.15.5.

Что может привести к тому, что приложение не распознает мой новый маршрут? Заранее спасибо за помощь.

Как вы используете свой код фляги? Вы запускаете его в режиме отладки с включенной автоматической перезагрузкой?

EAW 07.05.2024 18:20
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
74
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Чтобы решить проблему, когда Flask не распознает ваш новый маршрут, убедитесь, что маршрут правильно определен и зарегистрирован в Blueprint.

В main.py подтвердите правильную регистрацию Blueprint (app.register_blueprint(spacy_en_api)).

В router_en.py определите маршрут, используя @spacy_en_api.route("/MY_CUSTOM_ROUTE", методы=['POST']).

Проверьте согласованность именования между определением маршрута и командой Curl (curl -X POST http://localhost:5000/MY_CUSTOM_ROUTE).

Перезапустите приложение Flask после внесения изменений (python main.py).

Используйте операторы печати для отладки (print («Обработка запроса MY_CUSTOM_ROUTE»)).

Убедитесь, что Flask и зависимости обновлены (Flask 1.1.1, Python 3.7.3).

Эти шаги должны помочь эффективно диагностировать и решить проблему.

Перезапуск приложения Flask помог. Я подозревал что-то в этом роде, но все равно спасибо за подтверждение. Кстати, какую команду вы для этого используете? Мне удалось перезагрузиться с помощью ps aux/kill (pid)/python main.py, но мне было интересно, знаете ли вы «более чистый» способ сделать это?

sharp_blur 08.05.2024 15:02

Пожалуйста, попробуйте следующее:

В routes_en.py:

spacy_en_api_blueprint = Blueprint('spacy_en_api_blueprint', __name__)
    
@spacy_en_api_blueprint.route("/spacy_en_api", methods=['POST'])
def spacy_en_api():
  data["output"] = "test - it works"
  return jsonify(data)

в main.py:

from routes_en import spacy_en_api_blueprint
...
app.register_blueprint(spacy_en_api_blueprint)

Возможно, вы использовали то же имя метода в routes_en.py, что и переменная Blueprint, и поэтому импортировали неправильный объект.

Кроме того, я предположил, что данные были определены ранее, как в data = {}.

Решением было перезапустить приложение, но спасибо за отзыв. Также спасибо за упоминание о том, что мне следует определить «данные». Я сделал это раньше, но забыл скопировать при вставке сюда.

sharp_blur 08.05.2024 15:07

Другие вопросы по теме