Flask-在服务器上找不到请求的 URL

问题描述 投票:0回答:3

我认为这是一个简单的问题,但我有点被困在这里。

我正在尝试在 Flask 中部署 keras 模型。我的主要建议是练习 API。

但是每当我尝试打开给定的本地主机 ID 时,我都会不断收到此错误。

未找到

在服务器上找不到请求的 URL。如果您手动输入 URL,请检查拼写并重试。

我的代码中遗漏了什么吗?

这是我的代码:

from numpy.lib.twodim_base import tri
import pandas as pd
import numpy as np
import flask
from tensorflow.keras.models import load_model
import joblib
import csv
import codecs
import warnings

def warn(*arg, **kwargs):
    pass

warnings.warn = warn

#initialize the flask application

app = flask.Flask(__name__)

#load the pre-trained model

def define_model():
    global model
    model = load_model('./model/anomaly_model.h5')
    return print("Model is loaded")


limit = 10

@app.route("/submit", methods=["POST"])

def submit():
    #initialize the data dictionary that will be returned in the response
    data_out = {}
    #load the data file from our endpoint
    if flask.request.method == "POST":
        #read the data file
        file = flask.request.files['data_file']
        if not file:
            return "No file submitted"
        data = []
        stream, = codecs.iterdecode(file.stream, 'utf-8')
        for row in csv.reader(stream, dialect=csv.excel):
            if row:
                data.append(row)
                
        #convert input data to pandas dataframe
        
        df = pd.DataFrame(data)
        df.set_index(df.iloc[:, 0], inplace=True)
        df2 = df.drop(df.columns[0], axis=1)
        df2 = df2.astype(np.float64)
        
        #normalize the data
        scaler = joblib.load('./data/combined.csv')
        X = scaler.transform(df2)
        X = X.reshape(X.shape[0], 1, X.shape[1])
    
        data_out['Analysis'] = []
        preds = model.predict(X)
        preds = preds.reshape(preds.shape[0], preds.shape[2])
        preds = pd.DataFrame(preds, columns=df2.columns)
        preds.index = df2.index
        
        scored = pd.DataFrame(index=df2.index)
        yhat = X.reshape(X.shape[0], X.reshape[2])
        scored['Loss_mae'] = np.mean(np.abs(yhat - preds), axis=1)
        scored['Threshold'] = limit
        scored['Anomaly'] = scored['Loss_mae'] > scored['threshold']
        print(scored)
    
    #determine of an anomaly was detected
    
    triggered = []
    for i in range(len(scored)):
        temp = scored.iloc[i]
        if temp.iloc[2]:
            triggered.append(temp)
    print(len(triggered))
    if len(triggered) > 0:
        for j in range(len(triggered)):
            out = triggered[j]
            result = {"Anomaly": True, "Value":out[0], "filename":out.name} 
            data_out["Analysis"].append(result)
    else:
        result = {"Anomaly":"No Anomalies Detected"}
        data_out["Analysis"].append(result)
    print(data_out)
        
    return flask.jsonify(data_out)

if __name__ == "__main__":
    print(("* Loading the Keras model and starting the server ...."
          "Please wait until the server has fully started before submitting"))
    define_model()
    app.run(debug=True)

实际上我是 Flask 的新手。 这是我的第一次尝试。 我还尝试提供 app.run(host='0.0.0.0') 但对我不起作用。我可以寻求帮助吗???

这是来自终端的日志:

* Loading the Keras model and starting the server ....Please wait until the server has fully started before submitting
2021-12-27 16:29:45.158086: I tensorflow/core/platform/cpu_feature_guard.cc:151] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX2 FMA
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
Model is loaded
 * Serving Flask app 'implementation' (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Restarting with stat
* Loading the Keras model and starting the server ....Please wait until the server has fully started before submitting
2021-12-27 16:29:49.283527: I tensorflow/core/platform/cpu_feature_guard.cc:151] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX2 FMA
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
Model is loaded
Model is loaded
 * Debugger is active!
 * Debugger PIN: 114-980-010
127.0.0.1 - - [27/Dec/2021 16:05:37] "GET / HTTP/1.1" 404 -
127.0.0.1 - - [27/Dec/2021 16:05:38] "GET / HTTP/1.1" 404 -
127.0.0.1 - - [27/Dec/2021 16:05:53] "GET / HTTP/1.1" 404 -
127.0.0.1 - - [27/Dec/2021 16:05:56] "GET / HTTP/1.1" 404 -

希望得到一些帮助

谢谢

python flask
3个回答
2
投票

您应该尝试将

@app.route("/submit", methods=["POST"])
更改为
@app.route("/", methods=["POST"])
。即删除
submit
。当您运行程序时,默认位置是 http://127.0.0.1:5000/,但您尝试访问 http://127.0.0.1:5000/submit

每次都访问 http://127.0.0.1:5000/submit,或者从 url 中删除提交,这样更容易,并且每次访问默认位置。

这个答案非常相似。


0
投票

这取决于你想要什么。

您唯一的路线是

/submit
POST 路线。

您收到该错误是因为您正在点击

/
(GET) 路线而不是
/submit
(POST)

添加一条新路由来查看服务器的启动和运行情况

@app.route("/")
def home():
    return 'home'

或使用邮递员等工具,以 POST 请求的形式点击

/submit
路由。

另请记住端口是 5000。


0
投票

/submit 端点不是您可以通过输入 http://localhost:5000/submit 来命中的常规 GET 请求。

它显然正在等待文件上传。使用上传文件按钮制作一个虚拟前端,或者使用 Postman 创建带有必要标志的 Post 请求来上传文件,当然,请提供文件路径

© www.soinside.com 2019 - 2024. All rights reserved.