Flask Приложение показывает 404 на сообщение - PullRequest
0 голосов
/ 03 мая 2020

Это моя первая попытка развертывания приложения машинного обучения, а также моя первая попытка использования flask. По сути, пользователь заполняет форму на странице html, а входные данные из формы будут использоваться в качестве входных данных для модели машинного обучения, которая сохраняется в файле маринованного файла, model.pkl в коде ниже. Я сталкиваюсь с одной загадкой, которую, кажется, не могу преодолеть.

Каждый раз, когда я отправляю из index. html и публикую в результат. html Я получаю 404 ошибку .

script.py:

#importing libraries
import os
import numpy as np
import flask
import pickle
from flask import Flask, render_template, request

app=Flask(__name__)

@app.route('/')
@app.route('/index')
def index():
    return flask.render_template('index.html')


def ValuePredictor(to_predict_list):
    to_predict = np.array(to_predict_list).reshape(1,12)
    loaded_model = pickle.load(open("model.pkl","rb"))
    result = loaded_model.predict(to_predict)
    return result[0]

@app.route('/result',methods = ['POST'])
def result():
    if request.method == 'POST':
        to_predict_list = request.form.to_dict()
        to_predict_list=list(to_predict_list.values())
        to_predict_list = list(map(int, to_predict_list))
        result = ValuePredictor(to_predict_list)
        if int(result)==1:
            prediction='Income more than 50K'
        else:
            prediction='Income less that 50K'
        return render_template("result.html",prediction=prediction)

index. html :

<html>
<body>
    <h3>Income Prediction Form</h3>

<div>
  <form action="/result.html" method="POST">
    <label for="age">Age</label>
    <input type="text" id="age" name="age">
    <br>
    <label for="edu">Education</label>
    <select id="edu" name="edu">
      <option value="0">High School</option>
      <option value="1">College Degree</option>
    </select>
    <br>
    <label for="martial_stat">Marital Status</label>
    <select id="martial_stat" name="martial_stat">
      <option value="0">not married</option>
      <option value="1">married</option>
    </select>
    <br>
    <label for="gender">Gender</label>
    <select id="gender" name="gender">
      <option value="0">Female</option>
      <option value="1">Male</option>
    </select>
    <br>
    <input type="submit" value="Submit">
  </form>
</div>
</body>
</html>

результат. html:

<html>
   <body>
       <h1> {{ prediction }}</h1>
   </body>
</html>

Я не могу понять это. Мой код никогда не достигает первой строки в функции result(). Как только я отправлю из index.html http://127.0.0.1: 5000 / result. html выдает 404 error . Есть предложения?

Ответы [ 3 ]

1 голос
/ 03 мая 2020

Ошибка здесь очень проста, свойство действия в index.html должно быть просто

  <form action="/result" method="POST">

вместо

  <form action="/result.html" method="POST">

Вы хотите использовать /result до go через вашу flask функцию. Надеюсь, это поможет!

0 голосов
/ 03 мая 2020

Вместо <form action="/result.html" method="POST">
Можно использовать <form action="{{ url_for('result') }}" method="POST">

0 голосов
/ 03 мая 2020

Вы отправляете сообщение в конечную точку /result.html:

<form action="/result.html" method="POST">

... но ваш маршрут в flask определяется как /result (без .html):

@app.route('/result',methods = ['POST'])
def result():
   ...

Эти два значения должны совпадать, поэтому рассмотрите возможность изменения маршрута на result.html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...