У меня возникли проблемы с приложением 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.
Что может привести к тому, что приложение не распознает мой новый маршрут? Заранее спасибо за помощь.






Чтобы решить проблему, когда 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, но мне было интересно, знаете ли вы «более чистый» способ сделать это?
Пожалуйста, попробуйте следующее:
В 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 = {}.
Решением было перезапустить приложение, но спасибо за отзыв. Также спасибо за упоминание о том, что мне следует определить «данные». Я сделал это раньше, но забыл скопировать при вставке сюда.
Как вы используете свой код фляги? Вы запускаете его в режиме отладки с включенной автоматической перезагрузкой?