千家信息网

什么是FastAPI框架

发表于:2024-11-26 作者:千家信息网编辑
千家信息网最后更新 2024年11月26日,本篇内容主要讲解"什么是FastAPI框架",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"什么是FastAPI框架"吧!FastAPI 是一个用于构建 AP
千家信息网最后更新 2024年11月26日什么是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安全错误 数据库的锁怎样保障安全 计算机网络技术的横向发展 计算机网络技术每周几节课 云服务器能跑python代码吗 网络安全工程师需求 欢乐耍大牌连接服务器失败 运城家乐淘网络技术怎么样 国家级网络安全大脑提案 数据库修改记录的创建时间 常用的软件开发模型的特点 驻马店农业学校计算机网络技术 悠久之树服务器在维修吗 ffmpeg视频软件开发 夕阳视频软件开发 电脑上的时间同步服务器 中外网络安全防控措施对比 阿里如何加强网络安全建设 社区宣传国家网络安全宣传周 域服务器自动安装到域用户 地产策划师与软件开发哪个累 软件开发职员工资 前海金融有限公司软件开发部 软件开发几个阶段 数据库查询实验报告书 网络技术dlc是什么意思 SCI数据库技术技巧 江苏省大学网络安全专业排行 数据库中常常使用的布尔逻辑 北邮网络技术研究院合并 南京日月星软件开发有限公司 网络安全的自我理解
0