千家信息网

什么是FastAPI框架

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,本篇内容主要讲解"什么是FastAPI框架",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"什么是FastAPI框架"吧!FastAPI 是一个用于构建 AP
千家信息网最后更新 2025年01月19日什么是FastAPI框架

本篇内容主要讲解"什么是FastAPI框架",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"什么是FastAPI框架"吧!

FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。

关键特性:

  • 快速:可与 NodeJS 和 Go 比肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 Python web 框架之一。

  • 高效编码:提高功能开发速度约 200% 至 300%。

  • 更少 bug:减少约 40% 的人为(开发者)导致错误。

  • 智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。

  • 简单:设计的易于使用和学习,阅读文档的时间更短。

  • 简短:使代码重复最小化。通过不同的参数声明实现丰富的功能。bug 更少。

  • 健壮:生产可用级别的代码。还有自动生成的交互式文档。

  • 标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema。

以上这段是 FastAPI 官方文档的介绍,通过我自己的使用,发现虽然效率提升没有官方说得那么高,但是确实会快很多,而且我认为这个框架的代码书写更 pythonic 一点,如果用习惯了,在写别的 Python 代码时,也更加规范一些。

熟悉 Flask 的人上手 FastAPI 可能会比较快一些,一个 py 脚本就能搭起来一个网站,但是我们开发项目的时候,肯定不会把所有逻辑都塞在一个脚本里面,因此就需要提供一个像 Django 那样的完整项目框架,业务开发只要按照固定的规则添加就行了。虽然官方提供了一个项目框架模板,但是由于 FastAPI 自由度比较高,所以大家可以根据自己的习惯去实现一个项目框架,我就根据自己使用 Django 的习惯实现了一个我认为比较合适的框架结构。下面就是大概的介绍。

简介

使用FastAPI + MySql + Tortoise-orm 作为主要数据库操作,项目结构参考GitHub上两个项目:

  • CoderCharm / fastapi-mysql-generator

  • FastAPI-demo

功能

  • JWT token 认证。

  • 使用 Tortoise-orm models(MySql).

  • 基于 casbin 的权限验证

  • loguru 日志模块使用

权限控制

  • 登录、注册及路由中含有openapi的接口不进行登录和权限认证

async def jwt_authentication(         request: Request,         x_token: str = Header(             None,             title='登录Token',             description='登录、注册及开放API不需要此参数'         ) ):     """             除了开放API、登录、注册以外,其他均需要认证             :param request:             :return:             """     if 'openapi' in request.url.path.lower() or \             'login' in request.url.path.lower() or \             'register' in request.url.path.lower():         return None     ....

全局登录认证(除以上接口外,其余接口均进行登录认证)

app = FastAPI(         debug=settings.DEBUG,         title=settings.TITLE,         description=settings.DESCRIPTION,         docs_url=settings.DOCS_URL,         redoc_url=settings.REDOC_URL,         dependencies=[Depends(jwt_authentication)]     )

全局进行 Depends(jwt_authentication) 依赖注入

  • 接口权限认证

首先通过 auth/add 和 auth/del 接口进行权限配置

@router.get(     "/info",     summary="获取当前用户信息",     name="获取当前用户信息",     response_model=schema.UserOut,     response_model_exclude_unset=True,     dependencies=[Depends(Authority('user,check'))] )

在接口上添加 Depends(Authority('user,check')) 依赖注入来判断权限

  • 操作权限认证

在接口中进行特殊权限认证,只要使用check_authority函数判断即可,如果无权限会抛出异常

await check_authority(f'{request.state.user.username},auth,add')

配置

配置文件:

core/config/development_config.py 和 production_config.py

修改 API 文档默认地址

为了通过权限认证,将 API 文档地址修改为包含 openapi 的 URL

# 文档地址 默认为docs DOCS_URL: str = "/openapi/docs" # 文档关联请求数据接口 OPENAPI_URL: str = "/openapi/openapi.json" # redoc 文档 REDOC_URL: Optional[str] = "/openapi/redoc"
  • 超级管理员

设置用户角色为 super 的用户为超级管理员

SUPER_USER: str = 'super'

配置数据库

# 数据库配置 DATABASE_CONFIG: dict = {     'connections': {         # Dict format for connection         'default': 'mysql://root:123456@127.0.0.1:3306/testdb'     },     'apps': {         'models': {             # 设置key值"default"的数据库连接             'default_connection': 'default',             'models': [                 'apps.user.model',                 'auth.casbin_tortoise_adapter'             ]         }     } }

数据库使用 Tortoise-orm 库,因为我一直在使用 Django,Django 自有一套 ORM 模型操作,用起来比较方便也比较熟悉,很多人使用 sqlalchemy,我觉得这个不方便,而 Tortoise-orm 是借鉴了 Django ORM 来实现的异步数据库操作库,对于使用了 Django 的人来讲比较友好

运行

# 进入项目目录 pipenv install  # 进入虚拟环境 pipenv shell  # 运行服务器 python run.py

到此,相信大家对"什么是FastAPI框架"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

框架 权限 认证 接口 文档 数据 项目 登录 数据库 配置 代码 用户 开发 功能 地址 官方 标准 学习 开放 信息 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 如何安装mysql数据库网站 杭州至核互联网科技 sw版本比服务器还新 大学学生网络安全教育议论文 自用金融软件开发可以吗 忍者必须死3玩哪个服务器 分布式实时分析数据库 学什么网络技术有用 辉利网络技术有限公司 百万网民学法律网络安全法答案 网牛互联网科技有限责任公司 服务器工程师做什么的 中职网络技术期末考试 网络安全技术应用基础第五版 app扫码网络安全小故事 学软件开发专升本报哪个专业 aws 服务器优惠 第七个全民网络安全宣传周 网络安全技术匿名邮件 网络安全挑战响应协议 网络安全技术课程设计实验指导书 浪潮服务器配置ip命令 互联网科技公司有哪些品牌 清华同方服务器管理口地址 ftp服务器是如何配置的 笔记本如何当作服务器 广西互联网手优科技 pi币在全球有多少台服务器 四川安卓软件开发正规平台 服务器ssl套件
0