FastAPI 路径参数

FastAPI 路径参数

现代网络框架使用路由或端点作为URL的一部分,而不是基于文件的URL。这有助于用户更有效地记住应用程序的URL。在FastAPI中,它被称为路径。路径或路由是URL中第一个’/’后面的部分。

例如,在下面的URL中。

http://localhost:8000/hello/TutorialsPoint

的路径或路线将是

/hello/TutorialsPoint

在FastAPI中,这样的路径字符串被作为参数提供给操作装饰器。这里的操作指的是浏览器用来发送数据的HTTP动词。这些操作包括GET、PUT等。操作装饰器(例如,@app.get(“/”))后面紧跟着一个函数,当指定的URL被访问时,这个函数就会被执行。在下面的例子中 –

from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def index():
   return {"message": "Hello World"}

这里,(“/”)是路径,get是操作,@app.get(“/”)是路径操作装饰器,而它下面的index()函数被称为路径操作函数。

以下任何一个HTTP动词都可以作为操作使用。

编号:Sr.No. 方法和描述
1 GET 以未加密的形式向服务器发送数据。最常见的方法。
2 HEAD 与GET相同,但没有响应体。
3 POST 用来向服务器发送HTML表单数据。由POST方法收到的数据不会被服务器缓存。
4 PUT 用上传的内容替换目标资源的所有当前表现。
5 DELETE 删除由URL给出的目标资源的所有当前表示。

函数定义中的 async 关键字告诉FastAPI,它将被异步运行,即不阻塞当前执行线程。然而,也可以在没有async前缀的情况下定义一个路径操作函数。

这个装饰的函数返回一个JSON响应。尽管它可以返回几乎所有的Python对象,但它将被自动转换为JSON。在本教程的后面,我们将看到这样一个函数如何返回 Pydantic 模型对象。

URL的端点或路径可以有一个或多个变量参数。它们可以通过使用Python的字符串格式化符号来接受。在上面的URL http://localhost:8000/hello/TutorialsPoint 的例子中,最后一个值可能会在每个客户端请求中发生变化。这个变量参数可以在路径中定义的变量中接受,并传递给绑定到操作装饰器的函数中定义的形式参数。

例子

在路径中添加另一个带有变量参数的路径装饰器,并将 hello() 函数与名称参数绑定。按照下面的方法修改main.py的内容。

import uvicorn
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def index():
   return {"message": "Hello World"}
@app.get("/hello/{name}")
async def hello(name):
   return {"name": name}

启动Uvicorn服务器并访问http://localhost:8000/hello/Tutorialspoint URL。浏览器显示以下JSON响应。

{"name":"Tutorialspoint"}

将变量路径参数改为其他参数,如http://localhost:8000/hello/Python,这样浏览器就会显示–。

{"name":"Python"}

检查OpenAPI文档

现在,如果我们通过输入URL作为http://localhost:8000/docs,检查OpenAPI文档,它将显示两条路由和它们各自的视图功能。点击/hello/{name}按钮下面的尝试按钮,给Tutorialspoint作为名称参数的描述值,然后点击执行按钮。

FastAPI - 路径参数

然后,它将显示 Curl 命令、 请求的URL 和服务器响应的细节,包括响应体和响应头。

FastAPI - 路径参数

一个路由可以有多个参数,用”/”符号分隔。

from fastapi import FastAPI
app = FastAPI()
@app.get("/hello/{name}/{age}")
async def hello(name,age):
   return {"name": name, "age":age}

在这种情况下, /hello 是路线,后面是两个放在大括号里的参数。如果浏览器地址栏中给出的URL是http://localhost:8000/hello/Ravi/20,Ravi和20的数据将被分别分配给变量name和age。浏览器会显示以下的JSON响应 –

{"name":"Ravi","age":"20"}

带类型的路径参数

你可以对要装饰的函数参数使用Python的类型提示。在这种情况下,将name定义为str,age定义为int。

@app.get("/hello/{name}/{age}")
async def hello(name:str,age:int):
   return {"name": name, "age":age} 

如果类型不匹配,这将导致浏览器在JSON响应中显示一个HTTP错误信息。尝试输入http://localhost:8000/hello/20/Ravi 作为URL。浏览器的响应将如下 –

{
   "detail": [
      {
         "loc": [
            "path",
            "age"
         ],
      "msg": "value is not a valid integer",
      "type": "type_error.integer"
      }
   ]
}

原因很明显,因为 年龄 是整数,不能接受字符串值。这也将反映在Swagger用户界面(OpenAPI)文档中。

FastAPI - 路径参数

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程