Скрипт python Flask запускается до того, как будут заданы значения

#python #flask

Вопрос:

У меня есть простой скрипт python Flask, в котором я хочу с помощью формы добавить 2 пути к изображению, отправить эти пути на python и отправить обратно строку. Проблема у меня в том, что скрипт запускается до того, как форма заполнена и кнопка нажата. Как заставить сценарий ждать и запускаться только при нажатии кнопки «Отправить»?

Код для справки

 @app.route('/', methods=['GET', 'POST'])
@app.route('/index')
def index():
    PATH_REFERENCE = request.form.get("referencePhoto")
    PATH_TEST = request.form.get("testPhoto")
    testImage = cv2.imread(PATH_TEST)
    reference = setupReference(PATH_REFERENCE)
    face_locations, face_encodings = getFaceEmbeddingsFromImage(testImage, convertToRGB=True)
    for location, face_encoding in zip(face_locations, face_encodings):
        distances = face_recognition.face_distance(reference[0], face_encoding)
        if distances <= 0.6:
            result = 'Match!'
        else:
            result = 'Not Match!'
    return render_template('index.html', title='Home', result=result)
 

Ошибка в том, что скрипт не может работать с необъектом. Что имеет смысл, если форма не отправила необходимые пути.

Ответ №1:

Только выполняйте логику формы на посте — на get, просто подавайте форму.

 @app.route('/', methods=['GET', 'POST'])
@app.route('/index')
def index():
    result = ""
    if request.method == "POST":
      PATH_REFERENCE = request.form.get("referencePhoto")
      PATH_TEST = request.form.get("testPhoto")
      testImage = cv2.imread(PATH_TEST)
      reference = setupReference(PATH_REFERENCE)
      face_locations, face_encodings = getFaceEmbeddingsFromImage(testImage, convertToRGB=True)
      for location, face_encoding in zip(face_locations, face_encodings):
          distances = face_recognition.face_distance(reference[0], face_encoding)
          if distances <= 0.6:
              result = 'Match!'
          else:
              result = 'Not Match!'
    return render_template('index.html', title='Home', result=result)