首页 > 解决方案 > Flask 表单数据未发送

问题描述

我正在用 Flask 构建一个网络汽车价格预测器。但是,当我单击表单的提交按钮时,什么也没有发生,数据也没有发送也没有处理。我的终端在运行 Flask 应用程序后显示 HTTP 代码 200 和 304。

这是 HTML 表单:

<form action= '{{url_for('predict')}}' method="POST" id="form"></form>
    <h3>How much is my car worth?</h3>
    <p>Get an accurate price for your vehicle by entering the following details</p>
        <section class='year'>
            <label for="year">Year</label>
            <input type="number" name="year" id="year1" required='required' min="0">
        </section>
        <section class='msrp'>
            <label for="msrp">MSRP</label>
            <input type="number" name="msrp" id="msrp" required='required' min="0">
        </section>
      <section class='kms'>
            <label for="kms">Kilometers Driven</label>
            <input type="number" name="kms" id="kms" required='required' min="0">
        </section>
        <section class='owner'>
            <label for="owner">Previous Owners</label>
            <select name="owner" id="owner">
                <option value="1">0</option>
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
              </select>
        </section>
        <section class='fuel-type'>
            <label for="fuel">Fuel Type</label>
            <select name="fuel" id="fuel">
                <option value="Petrol">Petrol</option>
                <option value="Diesel">Diesel</option>
                <option value="CNG">CNG</option>
              </select>
              <section class='seller-type'>
                <label for="seller-type">Dealer or individual?</label>
                <select name="seller-type" id="seller-type">
                    <option value="Dealer">Dealer</option>
                    <option value="Individual">Individual</option>
                  </select>
        </section>
        <section class='transmission-type'>
            <label for="transmission">Transmission</label>
            <select name="transmission" id="transmission">
                <option value="Manual">Manual</option>
                <option value="Automatic">Automatic</option>
                </select>
        </section>
        <section>
            <input type='submit' id='submit'>
        </section>
</form>
<div id="price">
    <p>{{predPrice}}</p>
</div>
</body>
</html>

这是 Flask 应用程序:

import re
from flask import Flask, render_template, request
import pickle
import requests
import numpy as np
import pandas as pd


model = pd.read_pickle(r'predictor/price/vehicles/file.pkl')

app = Flask(__name__)

@app.route("/", methods = ['GET', 'POST'])
def predict():
   if request.method == 'POST': 
       year = int(request.form["year"]) # taking year input from the user
       tot_year = 2020 - year
       present_price = float(request.form["msrp"]) #taking the present prize
       fuel_type = request.form["fuel-type"] # type of fuel of car
       # if loop for assigning numerical values
       if fuel_type == "Petrol":
           fuel = 2
       elif fuel_type == "Diesel":
           fuel= 1
       else:
           fuel = 0
       kms_driven = int(request.form["kms"]) # total driven kilometers of the car
       transmission = request.form["transmission-type"] # transmission type
       # assigning numerical values
       if transmission == "Manual":
           transmission_type = 1
       else:
           transmission_type = 0
       seller_type = request.form["seller_type"] # seller type
       if seller_type == "Individual":
           seller_individual = 1
       else:
           seller_individual = 0
       owner = int(request.form["owner"])  # number of owners
       # X = [['Age', 'Present_Price', 'Kms_Driven', 'Fuel_Type', 'Seller_Type', 'Transmission', 'Owner']]
       values = [[
       tot_year,
       present_price,
       kms_driven,
       fuel,
       seller_individual,
       transmission_type,
       owner,
       ]]
       # created a list of all the user inputed values, then using it for prediction
       prediction = model.predict(values)
       prediction = round(prediction[0],2)
       # returning the predicted value inorder to display in the front end web application
       return render_template("home.html", predPrice = 'xd')
   else:
       return render_template('home.html')

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

HTML 在浏览器中打开,我可以填写表格。我什至可以单击提交按钮,但没有任何反应。此外,当我单击提交时,终端上没有出现任何消​​息。

标签: pythonhttpflask

解决方案


问题在于您的表单本身。您没有将输入元素放在表单元素中。您的所有部分都必须放在您的表单标签内。另一种方法是在所有输入中包含表单 id 属性。您已为表单提供了“form”的 id,因此只需使用form="form". 以下是更新部分的示例。

<section class='year'>
            <label for="year">Year</label>
            <input type="number" name="year" id="year1" form="form" required='required' min="0"
</section>

请记住,提交按钮也必须更新。


推荐阅读