【碎片】FastAPI 路径参数

2024-08-26 14:20
文章标签 参数 路径 fastapi 碎片

本文主要是介绍【碎片】FastAPI 路径参数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

FastAPI 是一个现代、快速(高性能)的 Web 框架,用于基于标准 Python 类型提示使用 Python 3.7+ 构建 API。它提供交互式 API 文档的自动生成,使您的 API 更容易理解和使用。在本博客中,我们将深入探讨 FastAPI 中请求处理和路径操作的基础知识,特别关注路径参数和查询参数。

什么是路径操作?

路径操作是应用程序中处理特定 HTTP 请求的端点。在 FastAPI 中,您可以使用映射到 HTTP 方法(GET、POST、PUT、DELETE)的装饰器来定义这些操作。每个路径操作都可以有自己的路径,其中可以包含路径参数。

路径参数

路径参数是嵌入在路径本身中的变量。这些参数允许您的 API 直接从 URL 捕获和使用动态值。

示例:路径参数

    from fastapi import FastAPI
    app = FastAPI()
    @app.get("/items/{item_id}")async def read_item(item_id: int): return {"item_id": item_id}

    在此示例中,`item_id` 是路径参数。当您访问 `/items/42` 时,`item_id` 将为 `42`。

    查询参数

    查询参数是可选的,通常用于过滤或排序 API 返回的数据。它们添加到 URL 末尾,以 `?` 开头,后跟用 `&` 分隔的键值对。

    示例:查询参数

      from fastapi import FastAPI
      app = FastAPI()
      @app.get("/items/")async def read_items(skip: int = 0, limit: int = 10): return {"skip": skip, "limit": limit}

      此处,`skip` 和 `limit` 是查询参数。当您访问 `/items/?skip=5&limit=20` 时,`skip` 值将为 `5`,`limit` 值将为 `20`。

      组合路径和查询参数

      您可以在单个路径操作中组合路径和查询参数。

      示例:路径和查询参数

        from fastapi import FastAPI
        app = FastAPI()
        @app.get("/users/{user_id}/items/")async def read_user_items(user_id: int, skip: int = 0, limit: int = 10): return {"user_id": user_id, "skip": skip, "limit": limit}

        在此示例中,`user_id` 是路径参数,而 `skip` 和 `limit` 是查询参数。当您访问 `/users/1/items/?skip=5&limit=20` 时,`user_id` 将为 `1`,`skip` 将为 `5`,`limit` 将为 `20`。

        请求正文

        虽然路径和查询参数非常适合简单数据,但可以使用请求正文发送更复杂的数据。 FastAPI 允许您定义 Pydantic 模型来验证请求主体。

        示例:请求主体

          from fastapi import FastAPIfrom pydantic import BaseModel
          app = FastAPI()
          class Item(BaseModel): name: str description: str = None price: float tax: float = None
          @app.post("/items/")async def create_item(item: Item): return item

          在此示例中,`Item` 模型定义请求主体的结构。当您使用 JSON 主体向 `/items/` 发送 POST 请求时,FastAPI 将根据 `Item` 模型对其进行验证。

          演示

          演示 1:路径参数

            from fastapi import FastAPI
            app = FastAPI()
            @app.get("/books/{book_id}")async def read_book(book_id: int): return {"book_id": book_id}
            # Run the server with: uvicorn demo1:app --reload

            ‍访问 `http://127.0.0.1:8000/books/10`,您将看到 `{"book_id": 10}`。

            演示 2:查询参数

              from fastapi import FastAPI
              app = FastAPI()
              @app.get("/books/")async def read_books(skip: int = 0, limit: int = 10): return {"skip": skip, "limit": limit}
              # Run the server with: uvicorn demo2:app --reload

              访问 `http://127.0.0.1:8000/books/?skip=5&limit=15`,您将看到 `{"skip": 5, "limit": 15}`。

              演示 3:结合路径和查询参数

                from fastapi import FastAPI
                app = FastAPI()
                @app.get("/authors/{author_id}/books/")async def read_author_books(author_id: int, skip: int = 0, limit: int = 10): return {"author_id": author_id, "skip": skip, "limit": limit}
                # Run the server with: uvicorn demo3:app --reload

                访问 `http://127.0.0.1:8000/authors/2/books/?skip=5&limit=15`,您将看到 `{"author_id": 2, "skip": 5, "limit": 15}`。

                让我们探索一些额外的示例,以帮助您更熟悉 FastAPI 中的请求处理和路径操作。这些演示将涵盖一系列场景,包括更复杂的路径参数、组合不同的参数类型以及处理请求主体。

                演示 4:具有多个段的路径参数


                  from fastapi import FastAPI
                  app = FastAPI()
                  @app.get("/files/{file_path:path}")async def read_file(file_path: str): return {"file_path": file_path}
                  # Run the server with: uvicorn demo4:app --reload
                  ‍ ‍ ‍ ‍ ‍ 在此示例中,`file_path` 可以捕获具有多个段的路径,例如 `/files/documents/reports/2024/report.pdf`。当您访问 `http://127.0.0.1:8000/files/documents/reports/2024/report.pdf` 时,您将看到 `{"file_path": "documents/reports/2024/report.pdf"}`。

                  演示 5:可选查询参数

                    from fastapi import FastAPIfrom typing import Optional
                    app = FastAPI()
                    @app.get("/search/")async def search_items(q: Optional[str] = None): if q: return {"query": q} return {"message": "No query provided"}
                    # Run the server with: uvicorn demo5:app --reload

                    在此示例中,`q` 是可选查询参数。如果您访问 `http://127.0.0.1:8000/search/?q=fastapi`,您将看到 `{"query": "fastapi"}`。如果您访问 `http://127.0.0.1:8000/search/` 而不使用查询参数,您将看到 `{"message": "No query provided"}`。

                    演示 6:查询参数的默认值

                      from fastapi import FastAPI
                      app = FastAPI()
                      @app.get("/users/")async def read_users(active: bool = True): return {"active_users_only": active}
                      # Run the server with: uvicorn demo6:app --reload

                      在此示例中,`active` 查询参数的默认值为 `True`。当您访问 `http://127.0.0.1:8000/users/` 时,您将看到 `{"active_users_only": true}`。您可以通过访问 `http://127.0.0.1:8000/users/?active=false` 来覆盖此设置,这将返回 `{"active_users_only": false}`。

                      演示 7:组合路径、查询参数和请求主体

                        from fastapi import FastAPIfrom pydantic import BaseModel
                        app = FastAPI()
                        class Order(BaseModel): item_id: int quantity: int
                        @app.post("/users/{user_id}/orders/")async def create_order(user_id: int, priority: str = "normal", order: Order): return {"user_id": user_id, "priority": priority, "order": order}
                        # Run the server with: uvicorn demo7:app --reload

                        在此示例中,`user_id` 是路径参数,`priority` 是具有默认值的查询参数,`order` 请求主体使用 Pydantic 模型进行验证。要测试这一点,你可以向 `http://127.0.0.1:8000/users/1/orders/?priority=high` 发送一个 POST 请求,其中包含以下 JSON 主体:

                          {    "item_id": 123,    "quantity": 2}

                          ‍这将返回:

                            {    "user_id": 1,    "priority": "high",    "order": {        "item_id": 123,        "quantity": 2    }}

                            演示 8:处理同名的多个查询参数

                              from fastapi import FastAPIfrom typing import List
                              app = FastAPI()
                              @app.get("/tags/")async def read_tags(tags: List[str] = None): return {"tags": tags}
                              # Run the server with: uvicorn demo8:app --reload

                              在此示例中,`tags` 是一个可以接受多个值的查询参数。当您访问 `http://127.0.0.1:8000/tags/?tags=python&tags=fastapi` 时,您将看到 `{"tags": ["python", "fastapi"]}`。

                              演示 9:使用枚举作为路径和查询参数

                                from fastapi import FastAPIfrom enum import Enum
                                app = FastAPI()
                                class Status(str, Enum): pending = "pending" completed = "completed" failed = "failed"
                                @app.get("/tasks/{status}")async def read_task(status: Status): return {"status": status}
                                @app.get("/tasks/")async def read_tasks(status: Status = Status.pending): return {"status": status}
                                # Run the server with: uvicorn demo9:app --reload

                                在此示例中,`Status` 是一个枚举,可用于路径和查询参数。访问 `http://127.0.0.1:8000/tasks/pending` 将返回 `{"status": "pending"}`,访问 `http://127.0.0.1:8000/tasks/?status=completed` 将返回 `{"status": "completed"}`。

                                这些附加演示说明了 FastAPI 在处理不同类型的参数和请求数据方面的多功能性和强大功能。通过使用这些示例,您可以轻松构建更具动态性和功能丰富的 API。

                                FastAPI 使处理带有路径和查询参数的请求变得非常简单。通过使用这些功能,您可以构建灵活、动态且易于理解和维护的 API。FastAPI 生成的交互式 API 文档进一步简化了探索和测试端点的过程。

                                码字不易,喜欢的话点和,分享给更多的朋友。或者关注小编,了解更多新篇章。也可以通过合集查看更多,谢谢!  


                                这篇关于【碎片】FastAPI 路径参数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


                                原文地址:
                                本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1108813

                                相关文章

                                VSCode设置python SDK路径的实现步骤

                                《VSCode设置pythonSDK路径的实现步骤》本文主要介绍了VSCode设置pythonSDK路径的实现步骤,包括命令面板切换、settings.json配置、环境变量及虚拟环境处理,具有一定... 目录一、通过命令面板快速切换(推荐方法)二、通过 settings.json 配置(项目级/全局)三、

                                使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

                                《使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)》字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓... 目录背景知识字体轮廓的表示实现步骤1. 安装依赖库2. 准备数据3. 解析路径指令4. 绘制图形关键

                                如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)

                                《如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)》:本文主要介绍如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)问题,具有很好的参考价值,希望对大家有所帮助,如有... 目录先在你打算存放的地方建四个文件夹更改这四个路径就可以修改默认虚拟内存分页js文件的位置接下来从高级-

                                Python FastAPI实现JWT校验的完整指南

                                《PythonFastAPI实现JWT校验的完整指南》在现代Web开发中,构建安全的API接口是开发者必须面对的核心挑战之一,本文将深入探讨如何基于FastAPI实现JWT(JSONWebToken... 目录一、JWT认证的核心原理二、项目初始化与环境配置三、安全密码处理机制四、JWT令牌的生成与验证五、

                                一文详解PostgreSQL复制参数

                                《一文详解PostgreSQL复制参数》PostgreSQL作为一款功能强大的开源关系型数据库,其复制功能对于构建高可用性系统至关重要,本文给大家详细介绍了PostgreSQL的复制参数,需要的朋友可... 目录一、复制参数基础概念二、核心复制参数深度解析1. max_wal_seChina编程nders:WAL

                                一文详解如何查看本地MySQL的安装路径

                                《一文详解如何查看本地MySQL的安装路径》本地安装MySQL对于初学者或者开发人员来说是一项基础技能,但在安装过程中可能会遇到各种问题,:本文主要介绍如何查看本地MySQL安装路径的相关资料,需... 目录1. 如何查看本地mysql的安装路径1.1. 方法1:通过查询本地服务1.2. 方法2:通过MyS

                                Linux高并发场景下的网络参数调优实战指南

                                《Linux高并发场景下的网络参数调优实战指南》在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃,本文基于真实案例分析,从参数解读、问题诊断到优... 目录一、问题背景:当并发连接遇上性能瓶颈1.1 案例环境1.2 初始参数分析二、深度诊断:连接状态与

                                史上最全nginx详细参数配置

                                《史上最全nginx详细参数配置》Nginx是一个轻量级高性能的HTTP和反向代理服务器,同时也是一个通用代理服务器(TCP/UDP/IMAP/POP3/SMTP),最初由俄罗斯人IgorSyso... 目录基本命令默认配置搭建站点根据文件类型设置过期时间禁止文件缓存防盗链静态文件压缩指定定错误页面跨域问题

                                Python如何调用指定路径的模块

                                《Python如何调用指定路径的模块》要在Python中调用指定路径的模块,可以使用sys.path.append,importlib.util.spec_from_file_location和exe... 目录一、sys.path.append() 方法1. 方法简介2. 使用示例3. 注意事项二、imp

                                使用Python实现矢量路径的压缩、解压与可视化

                                《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1