带有 uvicorn 的 FastAPI 出现 404 Not Found 错误

FastAPI with uvicorn getting 404 Not Found error

我正在尝试(失败)建立一个简单的 FastAPI 项目并 运行 它与 uvicorn。 这是我的代码:

from fastapi import FastAPI

app = FastAPI()

app.get('/')

def hello_world():
    return{'hello':'world'}

app.get('/abc')

def abc_test():
    return{'hello':'abc'}

这是我从终端运行得到的:

PS C:\Users\admin\Desktop\Self pace study\Python\Dev\day 14> uvicorn server2:app   
INFO:     Started server process [3808]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     127.0.0.1:60391 - "GET / HTTP/1.1" 404 Not Found
INFO:     127.0.0.1:60391 - "GET /favicon.ico HTTP/1.1" 404 Not Found

如您所见,我收到 404 未找到。可能是什么原因?一些与网络相关的东西,可能 firewall/vpn 阻止了此连接或其他东西?我对此很陌生。 提前致谢!

您需要使用这样的装饰器:@app.get('/')。看看 FastAPI Docs.

此外,看一下装饰器的一般工作方式,以更好地了解幕后的工作方式。

一些资源供您使用:

python docs

one of many articles I was able to find

another SO question

到现在为止,您可能已经明白了。为了获得 MWE 运行ning,您将在每个函数定义之前使用微服务的端点 decorators。以下代码段应该可以解决您的问题。 它假定您具有以下结构:

.
+-- main.py
+-- static
|   +-- favicon.ico
+-- templates
|   +-- index.html
from fastapi import FastAPI
from fastapi.responses import HTMLResponse, FileResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
import os

app = FastAPI()

app.mount("/static", StaticFiles(directory="static"), name="static")

templates = Jinja2Templates(directory="templates")

@app.get('/')
def hello_world():
    return{'hello':'world'}

@app.get('/favicon.ico')
async def favicon():
    file_name = "favicon.ico"
    file_path = os.path.join(app.root_path, "static")
    return FileResponse(path=file_path, headers={"Content-Disposition": "attachment; filename=" + file_name})

@app.get('/abc')
def abc_test():
    return{'hello':'abc'}

所以您已经准备好 运行 您的第一个使用 FastAPI 默认 ASGI 服务器的应用程序。

(env)$: uvicorn main:app --reload --host 0.0.0.0 --port ${PORT}