当前位置: 首页 > 知识库问答 >
问题:

FastAPI与uvicorn获得404未找到错误

南宫才艺
2023-03-14

我正在尝试(失败)设置一个简单的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。原因可能是什么?一些与网络相关的东西,可能是防火墙/vpn阻止此连接或其他什么?我是新来的。提前谢谢!

共有2个答案

贲宏硕
2023-03-14

现在你可能已经明白了。为了让MWE运行,您需要在每个函数定义之前使用微服务的endpoint装饰器。下面的片段可以解决您的问题。它假定您具有以下结构:

.
+-- 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-host0.0.0.0-port${PORT}

喻昀
2023-03-14

您需要使用这样的装饰器@app。获取(“/”)。看看FastAPI文档。

另外,看看装饰师通常是如何工作的,以便更好地了解幕后的工作方式。

为您提供的一些资源:

python文档

我能找到的许多文章之一

另一个如此的问题

 类似资料:
  • 我正在学习Fastapi,我正在localhost启动一个uvicorn服务器。每当出现错误/异常时,我都不会得到回溯。所有我得到的是: 所以,调试很困难,我正在试用python的日志模块 我还尝试过使用调试参数启动uvicorn

  • 我有一个本地运行的服务器。当我在AWS EC2上运行它并在8000端口上从外部发送请求时,我得到以下错误: 如果您能告诉我如何在端口80上执行此操作,那将非常好。

  • Supported tags and respective Dockerfile links python3.9, latest (Dockerfile) python3.8, (Dockerfile) python3.7, (Dockerfile) python3.6 (Dockerfile) python3.9-slim (Dockerfile) python3.8-slim (Dockerf

  • 你好,我试图学习野蝇和springboose一个非常简单的应用程序使用eclipse。项目名称是springboo-test。包括主方法类在内的所有类都在同一个包中。 主方法类称为'App',其代码如下: 以下是服务器日志: 11:36:57281信息[org.wildfly.extension.undertow](服务器服务线程池--68)WFLYUT0021:注册的web上下文:'/sprin

  • 我一直试图在2.1.0版本中运行Spring引导。我得到404错误,即使试图访问localhost:8080。我已经修改了所有的控制器,服务在同一个主包,但没有运气。任何帮助都很感激。下面是我的控制台日志...甚至localhost:8080也不起作用。 控制器类:

  • Traceback(最近的最后一次调用):文件"C:/用户/AppData/本地/程序/Python/Python37/client.py",第54行,引号=json.loads(urllib.request.urlopen(QUERY.格式(random.random())). read())文件"C:\用户\AppData\本地\程序\Python\Python37\lib\urllib\re