Python Flask“错误请求浏览器(或代理)发送了此服务器无法理解的请求。”

时间:2021-05-11 18:41:17

标签: api flask data-science

我有一个项目,我需要为机器学习模型构建 API,但我在测试 API 时遇到了问题。机器学习模型非常简单:我的模型试图根据一些变量(例如 CGPA、GRE 分数、大学排名和其他内容)预测学生被硕士课程录取的机会。

我试图用谷歌搜索这个问题,它似乎与“预测”函数中调用的方法有关,但我似乎无法确定并希望这里有人帮助我。我确定我遗漏了一些东西:

这是我的 API 代码:

from flask import Flask, jsonify, request
import requests
import joblib
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import cross_val_score

app = Flask(__name__)


@app.route("/")
def nothello():
    return "Welcome to machine learning model APIs!"

@app.route("/index")
def hello():
    return 'My First API' 

@app.route("/predict", methods=['POST','GET'])
def predict():
    json_ = request.get_json(force=True)
    query_df = pd.DataFrame(json_)
    query_df = query_df.reindex(columns=model_columns, fill_value=0)
    
    #Fixing ranges for variables.
    for name in query_df:
        if name == 'GRE Score':
            for value in query_df[name]:
                if 290>value or value>340:
                    return 'GRE Score out of range!'
        elif name == 'TOEFL Score':
            for value in query_df[name]:
                if 0>value or value>120:
                    return 'Toefl score out of range!'
        elif name == 'University Rating':
            for value in query_df[name]:
                if 1>value or value>5:
                    return 'University Rating out of range!'
        elif name == 'SOP':
            for value in query_df[name]:
                if 1>value or value>5:
                    return 'SOP out of range!'
        elif name == 'LOR':
            for value in query_df[name]:
                if 1>value or value>5:
                    return 'LOR out of range!'
        elif name == 'CGPA':
            for value in query_df[name]:
                if 0>value or value>9.0:
                    return 'CGPA out of range!'
        elif name == 'Research':
            for value in query_df[name]:
                if 0>value or value>1:
                    return 'Research out of range!'
        
                
    prediction = model.predict(query_df)
    return jsonify({'prediction': list(prediction),'scores':query_df.to_dict()})


if __name__ == '__main__':
    model = joblib.load("model.pkl") # Load "model.pkl"
    print ('Model loaded')
    model_columns = joblib.load("model_columns.pkl") # Load "model_columns.pkl"
    print ('Model columns loaded')
    app.run(debug=False)

为了测试这个 API,我在我的本地目录中创建了另一个 .py 文件,并尝试向我的 API 提供样本观察以获取预测。这是该请求的代码:

import requests
import json

url = 'http://127.0.0.1:5000/predict'
r = requests.get(url,json={'GRE Score':[339],'TOEFL Score':[107],'University Rating':[3.7],'SOP':[3.37],\
                          'LOR':[3.48],'CGPA':[8.58],'Research':[0.56]})

#print(r.json())

当我运行 Request.py 然后尝试打开链接:http://127.0.0.1:5000/predict 时,我得到了错误的请求页面。如果有人能帮助我意识到我的错误,我将不胜感激。

0 个答案:

没有答案