fastapi(二十三)-高级用户指南

【FastAPI】在FastAPI中实现用户登录和Token认证(JWT)并展示到Swagger UI 在现代的Web应用中,用户认证是非常关键的部分。无论是构建一个简单的API还是复杂的Web应用,保护用户数据和验证用户身份都是必不可少的。JWT(JSON Web Token)是一种非常流行的认证机制,结合FastAPI的强大功能,可以轻松实现基于Token的用户认证。在本文中,我们将介绍如何在FastAPI中实现用户登录,生成JWT Token,并通过该Token保护API路由。同时,我们还会展示如何在Swagger UI中使用这些接口进行测试和演示。JWT(JSON Web Token)是一种紧凑的、U 阅读详情

路径操作高级配置

OpenAPI的operationId
您可以使用operationId参数设置在路径操作中使用的OpenAPI operation_id。

from fastapi import FastAPI

app = FastAPI()


@app.get("/items/", operation_id="some_specific_id_you_define")
async def read_items():
    return [{"item_id": "Foo"}]

使用路径操作功能名称作为operationId

from fastapi import FastAPI
from fastapi.routing import APIRoute

app = FastAPI()


@app.get("/items/")
async def read_items():
    return [{"item_id": "Foo"}]


def use_route_names_as_operation_ids(app: FastAPI) -> None:
    """
    Simplify operation IDs so that generated API clients have simpler function
    names.

    Should be called only after all routes have been added.
    """
    for route in app.routes:
        if isinstance(route, APIRoute):
            route.operation_id = route.name  # in this case, 'read_items'


use_route_names_as_operation_ids(app)

要将路径操作从生成的OpenAPI架构(以及自动文档系统)中排除,请使用参数include_in_schema并将其设置为False

from fastapi import FastAPI

app = FastAPI()


@app.get("/items/", include_in_schema=False)
async def read_items():
    return [{"item_id": "Foo"}]

docstring的高级描述
您可以限制OpenAPI 的路径操作函数的文档字符串中使用的行。
添加一个\f(转义的“换页符”字符)会使FastAPI截断此时用于OpenAPI的输出。
它不会显示在文档中,但是其他工具(例如Sphinx)将可以使用其余的工具。

@app.post("/items/", response_model=Item, summary="Create an item")
async def create_item(*, item: Item):
    """
    Create an item with all the information:

    - **name**: each item must have a name
    - **description**: a long description
    - **price**: required
    - **tax**: if the item doesn't have tax, you can omit this
    - **tags**: a set of unique tag strings for this item
    \f
    :param item: User input.
    """
    return item

自定义响应-HTML,流,文件等

默认情况下,FastAPI将使用来返回响应JSONResponse。

您可以通过Response直接返回a来覆盖它,如直接返回响应中所示。

但是,如果Response直接返回a ,则不会自动转换数据,也不会自动生成文档(例如,Content-Type作为生成的OpenAPI的一部分,在HTTP标头中包含特定的“媒体类型” )。

但是您也可以Response在path操作decorator中声明要使用的。

从路径操作函数返回的内容将放在其中Response。

并且,如果该对象Response具有JSON媒体类型(application/json),则与JSONResponseand一样UJSONResponse,返回的数据将使用response_model在path操作decorator中声明的任何Pydantic自动转换(并过滤)。
使用ORJSONResponse
例如,如果要压缩性能,则可以安装和使用orjson并将响应设置为ORJSONResponse。

from fastapi import FastAPI
from fastapi.responses import ORJSONResponse

app = FastAPI()


@app.get("/items/", response_class=ORJSONResponse)
async def read_items():
    return [{"item_id": "Foo"}]

HTML响应
要直接从FastAPI返回HTML响应,请使用HTMLResponse。

导入HTMLResponse。
传递HTMLResponse的参数content_type你的路径运行。

from fastapi import FastAPI
from fastapi.responses import HTMLResponse

app = FastAPI()


@app.get("/items/", response_class=HTMLResponse)
async def read_items():
    return """
    <html>
        <head>
            <title>Some HTML in here</title>
        </head>
        <body>
            <h1>Look ma! HTML!</h1>
        </body>
    </html>
    """

FileResponse
异步传输文件作为响应。
与其他响应类型相比,采用不同的参数集进行实例化:

  • path -要流式传输的文件的文件路径。
  • headers -包含的任何自定义标头(作为字典)。
  • media_type-提供媒体类型的字符串。如果未设置,则文件名或路径将用于推断媒体类型。
  • filename-如果设置,则将包含在响应中Content-Disposition。
from fastapi import FastAPI
from fastapi.responses import FileResponse

some_file_path = "large-video-file.mp4"
app = FastAPI()


@app.get("/")
async def main():
    return FileResponse(some_file_path)

响应cookie
使用Response参数
您可以Response在路径操作函数中声明类型的参数。

然后,您可以在该时间响应对象中设置cookie 。

from fastapi import FastAPI, Response

app = FastAPI()


@app.post("/cookie-and-object/")
def create_cookie(response: Response):
    response.set_cookie(key="fakesession", value="fake-cookie-session-value")
    return {"message": "Come to the dark side, we have cookies"}

Response直接返回
当Response直接在代码中返回时,您还可以创建cookie 。

为此,您可以按照直接返回响应中所述创建响应。

然后在其中设置Cookies,然后将其返回:

from fastapi import FastAPI
from fastapi.responses import JSONResponse

app = FastAPI()


@app.post("/cookie/")
def create_cookie():
    content = {"message": "Come to the dark side, we have cookies"}
    response = JSONResponse(content=content)
    response.set_cookie(key="fakesession", value="fake-cookie-session-value")
    return response

响应标题
使用Response参数¶
您可以Response在路径操作函数中声明类型的参数(就像对cookie一样)。

然后,您可以在该时间响应对象中设置标题。

from fastapi import FastAPI, Response

app = FastAPI()


@app.get("/headers-and-object/")
def get_headers(response: Response):
    response.headers["X-Cat-Dog"] = "alone in the world"
    return {"message": "Hello World"}

Response直接返回
您还可以在Response直接返回时添加标头。

按照直接返回响应中所述创建响应,并将标头作为附加参数传递:

from fastapi import FastAPI
from fastapi.responses import JSONResponse

app = FastAPI()


@app.get("/headers/")
def get_headers():
    content = {"message": "Hello World"}
    headers = {"X-Cat-Dog": "alone in the world", "Content-Language": "en-US"}
    return JSONResponse(content=content, headers=headers)

响应-更改状态码
使用Response参数

from fastapi import FastAPI, Response, status

app = FastAPI()

tasks = {"foo": "Listen to the Bar Fighters"}


@app.put("/get-or-create-task/{task_id}", status_code=200)
def get_or_create_task(task_id: str, response: Response):
    if task_id not in tasks:
        tasks[task_id] = "This didn't exist before"
        response.status_code = status.HTTP_201_CREATED
    return tasks[task_id]
FastAPI(49)- 自定义响应之 ORJSONResponse、UJSONResponse 更多自定义响应类型 JSONResponse HTMLResponse、PlainTextResponse RedirectResponse StreamingResponse、FileResponse ORJSONResponse 作用 如果需要提高性能,可以安装并使用 orjson,并将响应设置为 ORJSONResponse 官方介绍:快速、正确的 Python JSON 库,支持 ... 阅读详情

相关推荐

FastAPI 路径参数完全指南:从基础到高级校验实战 [特殊字符]

路径参数是 RESTful API 中用于标识资源的变量,通常出现在 URL 路径中。例如,中的user_id就是一个路径参数。通过 Pydantic 的自定义验证器,可以实现更复杂的校验逻辑。示例请求→→ 422 错误。

https://blog.cmdragon.cn/ 1330

Fastapi进阶用法,路径参数,路由分发,查询参数等详解

在FastAPI中,我们可以使用include_router函数将一个或多个路由添加到应用程序中。 APIRouter 就给我们提供了在多个文件中注册路由的功能。

景天科技苑 3801

FastAPI 安装指南

FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,与 Python 3.6+ 类型提示一起使用。它是一个轻量级的框架,但功能强大,可以轻松地创建高性能的 Web 应用程序和服务。本指南将介绍如何在不同的操作系统上安装 FastAPI。

lsx202406的博客 1740

如何使用ORJSONResponse增强FastAPI应用性能:转换任意类型为JSON

在 Python 环境下使用 FastAPI 时,ORJSONResponse 是一种特殊的响应类,它利用 orjson 库来序列化 JSON 数据,以提高性能。orjson 是一个快速且正确的 JSON 库,它支持 dataclass、datetime 和 numpy 等数据类型的序列化。

1781

【 FastAPI 新手实践指南】

本文介绍了FastAPI框架的基础知识和实际应用,从安装配置到项目结构解析,详细讲解了路由、请求响应模型、错误处理、CORS中间件等核心功能。通过地址提取项目示例,展示了如何实现基础API接口、日志记录和部署等实践要点。文章还提供了学习建议和常见问题解答,帮助开发者快速掌握这一高性能Python Web框架的使用方法。

qq_53018080的博客 1117

FastAPI 中如何认证登录用户

用户第一次登录时输入账号密码,若服务器认证成功,则服务器会返还给用户一个有一定生命周期的 JWT,后续用户发送的所有请求都将携带这个 JWT。试想一下,你第一次登录b站的时候输入了一次用户名和密码,结果后面再次来到b站时,就不再需要登录了,b站会直接将登录后的页面展示给你,这是因为第一次登录后,b站已经记住了你的登录信息。OK,现在已经完成了 JWT 的创建,于是之后用户的每个请求中都会携带这个 JWT,而服务器这边则需要对 JWT 进行解码,从而验证用户信息是否正确。接下来就来完成这部分。

m0_73615873的博客 1271

fastapi中文_Fastapi中的4个有用的高级功能

fastapi中文Requests, Event Handlers, Environment Variables and WSGIMiddleware请求,事件处理程序,环境变量和WSGIMiddleware The topic for today is about four advanced features in FastAPI that might be useful in your web...

weixin_26716079的博客 4013

第二十八篇:Python 进阶-FastAPI 高级应用

FastAPI 基于 Pydantic 库进行数据验证。Pydantic 提供了一种强大且简洁的方式来定义数据模型,并自动验证输入数据是否符合这些模型。

无 152

FastAPI 教程 - 用户指南 - 介绍

FastAPI 教程 - 用户指南 - 介绍 本教程将引导您一步一步学习使用 FastAPI 的所有特性。 每个章节都是在前面章节的基础上一步一步构建的,但是每一章节的结构仍然是单独的主题,因此可以直接转到任何特定的章节主题来详细了解特定的API需求。 本教程也可以用于作为参考手册使用。因此就可以随时回看,用于精确解决API查询。 运行代码 本教程中所有的代码都可以拷贝并直接使用(它们实际上是经过测试的Python文件)。 执行示例代码时,可以将代码拷贝到 main.py 文件中,并通过 uvicorn 运

weixin_42132680的博客 2937

25、FastAPI 高级特性应用指南

本文详细介绍了 FastAPI 的多种高级特性,包括会话管理、自定义中间件、CORS 配置、APIRoute 和 Request 的灵活使用,以及多种响应类型的适用场景和优势。通过这些技术,可以优化微服务架构下的 API 开发,提升性能、安全性和开发效率。同时,文章还提供了丰富的代码示例与最佳实践建议,适合中高级开发者深入学习与应用。

2y3u4i5o6p的博客 65

ai数字人系统部署

这段代码实现了基本的语音交互闭环,用户通过语音输入问题,数字人识别语音后进行自然语言理解并生成回复,再将回复转换为语音输出。但实际应用中的 AI 数字人系统更为复杂,如形象渲染需专业图形引擎(如 Unity、Unreal Engine),自然语言处理也会涉及更复杂的模型微调及多轮对话管理等。一个完整的 AI 数字人系统涵盖形象生成、自然语言处理、动作控制等多个复杂功能,下面为你提供一个 Python 示例,整合多个库来实现数字人基础功能,包括语音交互、简单的自然语言理解以及通过虚拟形象展示对话。

weixin_ggwwsscc的博客 370

FastAPI 用户管理实战指南

FastAPI Users 是一个为 FastAPI 设计的开箱即用且可高度定制的用户管理库。它简化了在 FastAPI 应用中实现用户注册、认证和授权的过程。结合 SQLModel 和 SQLite,或者支持其他数据库系统如 MongoDB,FastAPI Users 提供了一整套解决方案,使得开发者能够快速集成用户身份验证功能,而无需从零开始编写认证逻辑。项目采用 Python 编写,灵活的架...

gitblog_00986的博客 760

H3C模拟器HCL防火墙路由模式主备配置实验

摘要:本文详细介绍了网络拓扑规划与设备配置方案。运营商仅提供一个接口地址,通过虚IP技术实现双防火墙高可用部署:主备防火墙分别配置10.20.10.1/29和10.20.10.2/29作为实际上联地址,共享10.10.10.2/24虚IP;下联配置172.168.10.0/24网段,核心交换机配置VLAN接口及192.168.10.1、192.168.20.1两个下联接口。文章包含运营商路由器、防火墙(HA配置、VVRP设置)和核心交换机的具体命令行配置步骤,并强调需进行主备切换验证。整个方案实现了单运营商

LQ的博客 1122

FastAPI Users 用户认证系统完整配置指南

FastAPI Users 是一个专为 FastAPI 框架设计的用户管理系统,提供了开箱即用的用户注册、登录、密码重置等核心功能。本文将带你从零开始配置完整的用户认证系统,涵盖基础设置到高级功能的全面实现。 ## 5分钟快速上手配置 要开始使用 FastAPI Users,首先需要安装相关依赖。通过 pip 安装是最简单的方式: ```bash pip install fastapi-us

gitblog_00709的博客 842

逆向实战:手把手教你分析Google DroidGuard虚拟机的加密与反调试(附Python脚本)

本文深入解析Google DroidGuard虚拟机的加密机制与反调试策略,提供从环境配置到逆向分析的完整实战指南。通过IDA Pro、Frida等工具链,详细剖析DroidGuard的信号拦截、内存校验等保护机制,并附Python脚本实现自动化分析,助力Android安全研究人员突破GMS核心组件的安全防护。

weixin_32428571的博客 313

ARM芯片内部的高速公路:手把手教你用AMBA Designer配置NIC-400互连控制器

本文详细介绍了如何使用AMBA Designer工具配置ARM芯片中的NIC-400互连控制器,涵盖从基础拓扑构建到高级QoS设置的完整流程。通过实际案例演示,帮助开发者掌握AXI协议下的高效片上网络设计,提升SoC性能与能效比。

weixin_26750481的博客 313

FastAPI用户认证系统开发指南:从零构建安全API

用户注册用户登录(获取JWT令牌)用户信息更新用户删除用户信息查询(单个/全部)数据库模型Pydantic模型(用于请求/响应验证)id: int本文详细介绍了如何使用FastAPI构建一个完整的用户认证系统,涵盖了从数据库模型设计到API实现的各个方面。FastAPI的基本使用和路由定义SQLAlchemy ORM的配置和操作JWT身份验证的实现密码安全处理的最佳实践RESTful API的设计原则。

m0_74488469的博客 1991

python实现ECMS算法

ECMS(Equivalent Consumption Minimization Strategy)算法是一种用于混合动力汽车能量管理系统的优化策略。它通过计算等效油耗来平衡电池电量消耗和燃油消耗,从而优化整体能耗。以下是一个简单的Python实现,用于演示ECMS算法的基本思想。这个实现假设了一个简单的混合动力汽车模型,其中电池电量和燃油消耗是主要的优化目标。

weixin_45570158的博客 923

FastAPI 教程翻译 - 用户指南 35 - 调试

FastAPI 教程翻译 - 用户指南 35 - 调试 FastAPI Tutorial - User Guide - Debugging You can connect the debugger in your editor, for example with Visual Studio Code or PyCharm. 您可以在编辑器中连接调试器,例如使用 Visual Studio Code 或 PyCharm。 Call uvicorn 调用 uvicorn In your FastAPI appl

人生苦短,我用Python! 2525

解决Gradle中NPM命令失效问题

摘要:本文分析了IntelliJ IDEA中Gradle执行npm命令失败的问题,报错显示"npm"文件不存在。通过确认npm安装路径、检查系统PATH与Gradle环境的差异,提出两种解决方案:1) 在build.gradle中使用npm绝对路径;2) 通过launchctl修改用户PATH。实例展示了如何修改Gradle脚本或系统配置来解决该问题,指出跨平台开发中环境变量配置的重要性。文章为开发者提供了处理类似问题的实用方法。

2501_90323865的博客 90

12、多端神经形态晶体管:原理、应用与算法探索

本文综述了多端神经形态晶体管的原理、应用与算法探索。从神经元MOS晶体管的发展到基于电解质栅极晶体管(EGT)的新型器件设计,系统阐述了其在低电压、多功能逻辑运算和突触行为模拟方面的优势。重点介绍了其在化学生物传感器(如多巴胺和pH检测)中的高灵敏度应用,以及在树突整合、时空总和、动态逻辑和神经元算术等树突算法中的实现。文章还总结了该类器件在神经形态计算、智能传感等领域的广阔前景,并分析了当前面临的材料工艺、理论建模与系统集成挑战,展望了未来发展方向。

delta的博客 143

FastAPI 教程与用户指南:从零安装、运行开发服务器到深入各章节的完整地图

本文围绕 FastAPI 官方文档中作为入门门户的 **Tutorial - User Guide(教程 - 用户指南)索引页**(日语版位于 [docs/ja/docs/tutorial/index.md](https://link.gitcode.com/i/a23659fa6aea2ed5baf9228cc6911490),英文原版位于 [docs/en/docs/tutorial/inde

gitblog_00835的博客 1032

华为OD机试新系统真题【迷宫相遇】

华为OD机试 新系统真题【迷宫相遇】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【迷宫相遇】多语言题解。

qq_45776114的博客 769

FastAPI 依赖注入完全指南

FastAPI依赖注入完全指南 🚀 本文深度剖析FastAPI的Depends()机制,揭示其设计原理与最佳实践: 1️⃣ 核心机制 通过类型注解自动解析依赖树 支持同步/异步依赖函数 自动处理依赖生命周期管理 2️⃣ 5大高级模式 类形式依赖(最常用) 带缓存的单例依赖 带资源清理的上下文依赖 动态参数依赖 测试友好的依赖覆盖 3️⃣ 关键优势 ✔️ 解耦业务与技术实现 ✔️ 自动参数验证与转换 ✔️ 简化测试与Mock ✔️ 内置请求级缓存机制 4️⃣ 性能优化 惰性加载重型依赖 异步IO支持 智能依

weixin_50882748的博客 1570

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

FastAPI 获取当前登录用户信息的 3 种方式:FastAPI-Azure-Auth 实战指南

在开发基于 **FastAPI** 的后端服务时,接入 **Azure Entra ID**(原 Azure AD)认证后,你立刻会面临一个核心问题:**如何在 FastAPI 中获取当前登录用户的信息?** 用户名、邮箱、角色、租户 ID……这些数据是权限控制、审计日志和个性化功能的基础。 本文将基于开源库 **FastAPI-Azure-Auth**(一个为 FastAPI API 提供 A

gitblog_00891的博客 968

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【FastAPI】FastAPI依赖注入完全指南

本文全面介绍FastAPI的依赖注入机制,主要包含两大注入方式:原生自动注入和Depends自定义注入。原生注入支持Request/Response等框架对象以及路径/查询参数等自动解析,而Depends则用于自定义依赖项注入。文章详细讲解依赖注入的核心思想、实现方式、生命周期管理、高级技巧,并通过完整认证系统案例展示实战应用。最后剖析Depends底层原理,并与Spring框架进行对比,帮助开发者彻底掌握FastAPI这一核心特性,实现代码解耦和高效开发。

weixin_63434398的博客 3486

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

上一篇: fastapi(二十二)-应用配置
下一篇: Python 装饰器应用
vanexph
博客等级 码龄15年 4015粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值