【问题标题】:how do I make API request after deploying uvicorn via fastapi in mylaptop在 mylaptop 中通过 fastapi 部署 uvicorn 后如何发出 API 请求
【发布时间】:2021-11-28 06:57:53
【问题描述】:

我是 FastAPI/模型部署的新手,我设法创建了一个模型,该模型可以使用本地服务器/笔记本电脑中的 FastAPI 文档路径返回结果。

我的问题是,我如何在 jupyter notebook 中访问这个模型?

尝试关联其他 API 请求,例如 Foursquare API。如何包装 params 字典

尝试了以下方法,但它不起作用

import requests

url = 'http://127.0.0.1:8000/predict'
params = { 'title' : ['Product Operations Software Engineer (DevOps / SRE)']}

result = requests.post(url, params)

<Response [422]>
result.text
'{"detail":[{"loc":["body"],"msg":"value is not a valid dict","type":"type_error.dict"}]}'

输入

输出

我的代码

from  fastapi import FastAPI
import numpy as np
import dill
import pandas as pd
import uvicorn
import re
from pydantic import BaseModel

app = FastAPI()

class JobTitle(BaseModel):
    title: list


#load model
with open("logisticmodel", "rb") as to_load:
    logistic_model = dill.load(to_load)

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

@app.post("/predict")
def predict(request: JobTitle):
    
    X = pd.Series(request.title)
    result = logistic_model.predict(X)
    return {'Type' : list(result) }

【问题讨论】:

  • 您的服务器在另一台设备上吗?然后,AFAIK,您不能使用http://127.0.0.1 来引用它。您必须使用外部 IP 或本地网络 IP(如果连接到同一网络)。

标签: python fastapi


【解决方案1】:

您的代码表明您的数据应该放在 HTTP 请求正文中

@app.post("/predict")
def predict(request: JobTitle):
    ...

但是当您使用 requests 模块发出 HTTP 请求时,
您没有在请求正文中添加任何内容。
您应该使用json 参数,以便将数据放在正确的位置:

result = requests.post(
    url,
    json={'title': ['Product Operations Software Engineer (DevOps / SRE)']}
)

您可以使用requests 模块检查this 发送带有请求正文的HTTP 请求,
this 用于构建带有请求正文的 API。

【讨论】:

    【解决方案2】:

    您需要使用.dict() 来获取BaseModel 实例的字典。在你的情况下,request.dict()

    另外,像这样定义你的模型,

    class JobTitle(BaseModel):
        title: List[str]
    

    【讨论】:

      【解决方案3】:

      这行得通:

      >>> result = requests.post(url, json=params)
      >>> result
      <Response [200]>
      

      【讨论】:

        猜你喜欢
        • 2022-01-23
        • 2022-11-10
        • 1970-01-01
        • 1970-01-01
        • 2016-04-30
        • 2016-11-20
        • 2022-08-04
        • 2021-04-12
        • 2022-01-05
        相关资源
        最近更新 更多