首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

FastAPI -设置请求对象的url或路径

FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,基于 Python 3.7+ 的类型提示。它的主要优势在于其简洁的语法、高性能、自动的 API 文档生成以及对异步编程的良好支持。

基础概念

在 FastAPI 中,你可以通过依赖注入系统来访问请求对象,包括 URL 和路径参数。请求对象通常是 Request 类的实例,它包含了客户端请求的所有信息。

设置请求对象的 URL 或路径

路径参数

路径参数是在路由定义中指定的变量部分。例如:

代码语言:txt
复制
from fastapi import FastAPI, Request

app = FastAPI()

@app.get("/items/{item_id}")
async def read_item(request: Request, item_id: int):
    return {"item_id": item_id, "url": str(request.url)}

在这个例子中,{item_id} 是一个路径参数,它的值会被传递给 read_item 函数作为 item_id 参数。

URL 参数

URL 参数通常是指查询字符串中的参数。你可以通过 request.query_params 来访问它们:

代码语言:txt
复制
@app.get("/items/")
async def read_items(request: Request):
    query_param = request.query_params.get("q")
    return {"query_param": query_param}

在这个例子中,如果请求的 URL 是 /items/?q=somevalue,那么 query_param 将会是 "somevalue"

应用场景

  • 动态路由:当你的 API 需要根据不同的输入提供不同的资源时,路径参数非常有用。
  • 过滤和搜索:查询字符串参数常用于实现搜索和过滤功能。

可能遇到的问题及解决方法

问题:路径参数类型不匹配

如果你在路径参数中指定了错误的类型,FastAPI 会在启动时抛出错误。例如:

代码语言:txt
复制
@app.get("/items/{item_id}")
async def read_item(item_id: str):  # 错误:应该是 int 或其他类型
    ...

解决方法:确保路径参数的类型与实际传递的值相匹配。

问题:查询参数缺失

如果你的函数依赖于某个查询参数,但客户端没有提供,可能会导致函数执行失败。

解决方法:使用默认值或者检查参数是否存在。

代码语言:txt
复制
@app.get("/items/")
async def read_items(q: str = None):
    if q is None:
        return {"error": "Query parameter 'q' is required"}
    return {"query_param": q}

示例代码

以下是一个完整的示例,展示了如何在 FastAPI 中处理路径参数和查询参数:

代码语言:txt
复制
from fastapi import FastAPI, Request

app = FastAPI()

@app.get("/items/{item_id}")
async def read_item(request: Request, item_id: int):
    return {"item_id": item_id, "url": str(request.url)}

@app.get("/items/")
async def read_items(request: Request, q: str = None):
    if q is None:
        return {"error": "Query parameter 'q' is required"}
    return {"query_param": q}

在这个示例中,第一个路由处理带有路径参数的请求,第二个路由处理带有可选查询参数的请求。

通过这种方式,你可以灵活地处理不同类型的请求,并根据需要访问请求的 URL 和路径信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

FastAPI学习-2.url 上的路径参数

”或”变量 from fastapi import FastAPI app = FastAPI() @app.get("/items/{item_id}") async def read_item(...如果我们想让路径参数 item_id 只能传 数字类型,于是可以使用标准的 Python 类型标注为函数中的路径参数声明类型。...如果你提供的是 float 而非整数也会出现同样的错误,比如:http://127.0.0.1:8000/items/4.2 所以,通过同样的 Python 类型声明,FastAPI 提供了数据校验功能...docs文档 打开浏览器访问 http://127.0.0.1:8000/docs,你将看到自动生成的交互式 API 文档: 顺序很重要 在创建路径操作时,你会发现有些情况下路径是固定的。...由于路径操作是按顺序依次运行的,你需要确保路径 /users/me 声明在路径 /users/{user_id}之前: from fastapi import FastAPI app = FastAPI

1.1K10

javaWeb项目中的路径格式 请求url地址 客户端路径 服务端路径 url-pattern 路径 获取资源路径 地址 url

javaweb项目中有很多场景的路径 客户端的POST/GET请求,服务器的请求转发,资源获取需要设置路径等 这些路径表达的含义都有不同,所以想要更好的书写规范有用的路径代码 需要对路径有一个清晰地认知...路径基本上分三类 客户端路径 服务端路径 其他 路径相关的操作类型 超链接 表单 重定向 转发 包含 url-pattern> ServletContext..."); ---- 服务端路径 请求转发 请求 服务器端路径必须是相对路径,不能是绝对路径。...但相对路径有两种形式 以“/”开头; 不以“/”开头; 其中请求转发、请求包含都是服务器端路径request.getRequestDispatcher()的参数 服务器端路径与客户端路径的区别是...---- 其他 url-pattern url-pattern>必须使用“/”开头,并且相对的是当前应用。

4.9K41
  • url加时间戳避免再次请求当前路径出现的缓存问题

    大家好,又见面了,我是你们的朋友全栈君。 1.先解释一下,为什么要加时间戳: URL后面添加随机数通常用于防止客户端(浏览器)缓存页面。...浏览器缓存是基于url进行缓存的,如果页面允许缓存,则在一定时间内(缓存时效时间前)再次访问相同的URL,浏览器就不会再次发送请求到服务器端,而是直接从缓存中获取指定资源。...Date().getTime(); url=url+“?...timestamp=”+getTimestamp return url; } 3.加时间戳的位置: 时间戳是加在对controller发起请求的URL中。...如 1解释的,在URL中加时间戳就会保证每一次发起的请求都是一个 不同于之前的请求,这样就能避免浏览器对URL的缓存。

    4.2K10

    使用requests解决请求库Session对象设置超时的问题

    默认情况下,requests 的 Session 对象没有提供一个全局设置超时的属性,而是需要在每个请求中单独设置超时时间,或者创建一个自定义的子类来处理超时。...这个属性将允许我们在创建 Session 对象时设置一个全局的超时时间,而不需要在每个请求中单独指定超时时间,也不需要创建自定义的子类。...如果在创建 Session 对象时传递了一个值,那么超时时间属性可以被设置为该值。当通过 Session 对象发起请求时,超时时间属性将用于设置该请求的超时时间。...这将帮助用户了解如何使用超时时间属性,并如何设置请求的超时时间。...总的来说,向 requests 的 Session 对象添加超时时间属性将使用户能够更轻松地设置请求的超时时间,简化了创建自定义子类来处理超时的过程。

    40120

    Spring Boot 自定义 Swagger2 请求 URL 路径的两种方法

    : http://localhost:端口/swagger-ui.html 如果我们想要修改上述的请求路径,则需要进行一些修改。...在这里,以 Spring Boot 项目为例,给出两种自定义 Swagger2 请求 URL 路径的方法。...: /tmp/tomcat servlet: # 添加统一服务前缀 context-path: /selfpath 如上述配置所示,其中/selfpath就是我们修改的应用根路径,也是我们自定义的请求路径...但与第一种方法不同,使用第二种方法配置完之后,Swagger2 的访问路径应该为: http://localhost:端口/selfpath/swagger/index.html 其中,我们自定义的路径为...特别地,在swagger-ui的 3.0 版本之后,该项目调整了目录结构,已经没有dist目录了。 参考资料: Swagger请求的更改请求的url地址

    13.9K31

    FastAPI学习-2.访问路径(路由)

    路径也通常被称为端点或路由 简单demo 最简单的 FastAPI 文件可能像下面这样: from fastapi import FastAPI app = FastAPI()@app.get("/...所以,在一个这样的 URL 中: https://example.com/items/foo 路径会是 /items/foo 「路径」也通常被称为「端点」或「路由」。...定义一个_路径操作装饰器 @app.get("/") @app.get("/") 告诉 FastAPI 在它下方的函数负责处理如下访问请求: 请求路径为 / 使用 get 操作 你也可以使用其他的操作:...每当 FastAPI 接收一个使用 GET 方法访问 URL「/」的请求时这个函数会被调用。 在这个例子中,它是一个 async 函数。...还有许多其他将会自动转换为 JSON 的对象和模型(包括 ORM 对象等)。尝试下使用你最喜欢的一种,它很有可能已经被支持。 总结 导入 FastAPI。 创建一个 app 实例。

    62030

    FastAPI(2)- 快速入门

    redoc OpenAPI FastAPi 使用 API 的 OpenAPI 标准为所有 API 生成 schema schema 是对事物的一种定义或描述 它并非具体的实现代码,而只是抽象的描述...Starlette 的功能 第二步:创建一个 FastAPI 实例 app = FastAPI() app 就是 FastAPI 类的一个实例对象啦 重点:app 将是创建所有 API 的主要交互对象...路径 指的是 URL 中从第一个 / 起的后半部分,即常说的 path 比如: 的路径就是/items/foo https://example.com/items/foo 路径也称为:端点、路由 操作...("/") 有两点含义 请求路径为 / 使用 get 请求 其他请求方法的装饰器 @app.post() @app.put() @app.delete() @app.options() @app.head...(包括 ORM 对象等) FastAPI 入门总结 编写一个最简单的 FastAPI 应用程序五部曲 导入 FastAPI 创建一个 app 实例 编写一个路径操作装饰器,如 @app.get(

    1.6K40

    全面拥抱FastApi —三大参数及验证

    前面说过 FastApi 的一大特点是基于标准的 Python 3.6类型声明,兼具参数校验功能,这一切都要归功于 Pydantic 路径参数 路径参数即 url 路径参数,可以使用 Python 格式字符串相同语法声明路径...“参数”或“变量”,例如: from fastapi import FastAPI app = FastAPI() @app.get("/items/{item_id}") async def read_item...(url, params=data) 以 关键字参数 params 传过去的就是查询参数,你可以将其中的 response.url 打印出来即可看到 ?...其中还有一个是路径参数:item_id, str 类型 请求体参数 要发送请求正文,必须使用一个:POST, PUT,DELETE或PATCH,需导入 Pydantic 的 BaseModel from...同时,FastApi 可以自动帮我们识别请求 body 参数, 路径参数以及查询参数,并准确的获取参数数据。

    5.4K30

    FastAPI(52)- Response Cookies 响应设置 Cookies

    有两种实现场景 路径操作函数声明 Response 参数来设置 Cookie 在函数内,通过 return Response 来设置 Cookie 路径操作函数声明 Response 参数来设置 Cookie...Cookie"} 然后可以像往常一样返回需要的任何对象(字典、数据库模型等) 如果声明了一个 response_model,它仍将用于过滤和转换返回的对象 FastAPI 将使用该临时响应来提取 cookie...、headers 请求结果 再看看 Application 设置 Cookie 成功啦 声明 response_model 和使用依赖项的栗子 from fastapi import FastAPI...cookie 的生命周期,以秒为单位,int 负数或0表示立即丢弃该 cookie expires cookie 的过期时间,以秒为单位,int path cookie 种在哪个路径之下,默认根路径,...cookie 的生命周期,以秒为单位,int 负数或0表示立即丢弃该 cookie expires cookie 的过期时间,以秒为单位,int path cookie 种在哪个路径之下,默认根路径

    2.4K30

    FastAPI(58)- 使用 OAuth2PasswordBearer 的简单栗子

    背景 假设在某个域中拥有后端 API(127.0.0.1:8080) 并且在另一个域或同一域的不同路径(或移动应用程序)中有一个前端(127.0.0.1:8081) 并且希望有一种方法让前端使用用户名和密码与后端进行身份验证...API 可以独立于对用户进行身份验证的服务器 但在这种情况下,同一个 FastAPI 应用程序将同时处理 API 和身份验证 前端请求 /items 的之前要先进行身份验证,也就是用户名和密码,这个验证的路径就是...tokenUrl,是相对路径,POST请求 oauth2_scheme 中接收一个 str 类型的 token,就是当验证通过后,要返回给客户端的一个令牌(常说的 token) 方便下次请求携带这个...URL 路径操作,只是指明了客户端用来获取 token 的目标 URL tokenUrl 是相对路径 如果 API 位于 https://example.com/,那么它将引用 https://example.com...会做什么 客户端发送请求的时候,FastAPI 会检查请求的 Authorization 头信息,如果没有找到 Authorization 头信息 或者头信息的内容不是 Bearer token,它会返回

    2.8K40

    【机器学习】GLM-4V:图片识别多模态大模型(MLLs)初探

    代码示例: # 导入FastAPI模块 from fastapi import FastAPI # 创建一个FastAPI实例 app = FastAPI() # 定义一个路径操作函数 @app.get...应用,当访问根路径/时,会返回一个包含"Hello World"的消息。...3.1.3 pydantic Pydantic是一个Python库,用于数据验证和设置管理。它被广泛用于FastAPI中,用于定义请求和响应模型,以进行数据验证和解析。...Qwen-VL模型占用18.74G,整整多了10G显存) 3.3 GLM-4V-API客户端 3.3.1 代码示例 import requests import json # 定义请求的URL url...在远处,可以看到陆地和大海的交界线,以及一些小岛或陆地突起。整个场景给人一种宁静、宽广的感觉。” qwen-vl输出为 “这是海面,可以看到远处的海平线和海岸线。天空中飘着美丽的云彩。”

    66210

    FastAPI学习-3.get 请求 query params 查询参数

    前言 get 请求的参数在url 后面带着,一般叫query params 查询参数 查询参数 声明不属于路径参数的其他函数参数时,它们将被自动解释为”查询字符串”参数 from fastapi import...skip=20 函数中的参数值将会是: skip=20:在 URL 中设定的值 limit=10:使用默认值 可选参数 通过同样的方式,你可以将它们的默认值设置为 None 来声明可选查询参数: from...short=1 或者 short=True, short=true, short=on, short=yes 或任何其他的变体形式(大写,首字母大写等等),你的函数接收的 short 参数都会是布尔值...对于值为 False 的情况也是一样的。 多个路径和查询参数 你可以同时声明多个路径参数和查询参数,FastAPI 能够识别它们。 而且你不需要以任何特定的顺序来声明。...如果你不想添加一个特定的值,而只是想使该参数成为可选的,则将默认值设置为 None。

    3K10

    (入门篇)简析Python web框架FastAPI——一个比Flask和Tornada更高性能的API 框架

    再来看看 FastAPI 的异步代码 from fastapi import FastAPI app = FastAPI() # 创建 api 对象 @app.get("/") # 根路由 async...URL中位于关键字之后的一组键值对,以&字符分隔。 在 url 中进行查询 http://127.0.0.1:8000/items/?...skip=0&limit=10 skip:查询的起始参数 limit:查询的结束参数 ? 成功返回查询列表。 查询参数类型转换 FastAPI 非常聪明,足以辨别 路径参数 和 查询参数。...成功提交并返回 200 状态码 请求主体+路径+查询参数,在请求主体的基础上加入 url 动态路径参数 和 查询参数 from fastapi import FastAPI from pydantic...值得注意的是,在返回的 TemplateRespone 响应时,必须带上 request 的上下文对象,传入参数放在同一字典。

    2.1K20
    领券