Tortoise-ORM FastAPI integration 中文文档(完整版)

Tortoise-ORM FastAPI integration 中文文档(完整版)

前言

初衷:在学习的时候发现 Tortoise-ORM FastAPI integration 官方文档缺中文版,翻阅英文文档效率低,萌生翻译想法。
本系列旨在原汁原味的翻译 Tortoise-ORM FastAPI integration 官方文档,帮助英语不好的小伙伴快速学习使用方法。
翻译不易,禁止商业用途,转载请标明出处(本人博客: torna.top),具体情况或反馈请联系博主绿泡泡l927171598
如果觉得翻译不错,欢迎在文章底部请博主喝杯奶茶,您的鼓励就是俺最大的动力!😄

简介

tortoise.contrib.fastapi 是一个轻量级的集成工具包,其中包含一个可以在生命周期设置/清理 Tortoise-ORM 的类 RegisterTortoise

FastAPI 基本上是由 Starlette 这 Pydantic 两个库以一种非常独特的方式结合而成的。

查看FastAPI 示例并查看Pydantic 序列化教程

参考

HTTPNotFoundError

class tortoise.contrib.fastapi.HTTPNotFoundError(**data)

官方源代码直通车: [source]

具体摘要

Bases: BaseModel

detail : str
模型计算字段
model_computed_fields : ClassVar[dict[str, ComputedFieldInfo]] = {}
模型配置

计算字段名称及其对应的 CompulatedFieldInfo 对象的字典。

model_config : ClassVar[ConfigDict] = {}
模型字段

模型的配置应为符合 [ConfigDict][pydantic.config.ConfigDict] 规范的字典。

model_fields : ClassVar[dict[str, FieldInfo]] = {'detail': FieldInfo(annotation=str, required=True)}

关于模型中定义好的字段的元数据,这些字段名称将映射到 [FieldInfo][pydantic.fields.FieldInfo]

RegisterTortoise 方法注册 tortoise-orm

该功能替代了 Pydantic V1 中的 Model.__fields__ 方法。

class tortoise.contrib.fastapi.RegisterTortoise(app,
    config=None,
    config_file=None,
    db_url=None,
    modules=None,
    generate_schemas=False,
    add_exception_handlers=False,
    use_tz=False,
    timezone='UTC',
    _create_db=False
)

官方源代码直通车: [source]
官方参数说明:[app] -[config] -[config_file] -[db_url] -[modules] -[generate_schemas] -[add_exception_handlers] -[user_tz] -[timezone]
本文档提供中文解释,并附有官方文档的链接。

Bases: AbstractAsyncContextManager

在 FastAPI 应用程序的运行周期内注册 Tortoise-ORM,并在其生命周期内设置和销毁。

你可以仅用configconfig_file(db_url, modules)中任意一个来注册 Tortoise-ORM。

参数
app 实例

app : FastAPI: FastAPI 应用程序实例。

config 配置

config : Optional[dict]:包含配置文件的字典。

示例:

{
   'connections': {
       # Dict format for connection
       'default': {
           'engine': 'tortoise.backends.asyncpg',
           'credentials': {
               'host': 'localhost',
               'port': '5432',
               'user': 'tortoise',
               'password': 'qwerty123',
               'database': 'test',
           }
       },
       # Using a DB_URL string
       'default': 'postgres://postgres:qwerty123@localhost:5432/events'
   },
   'apps': {
       'models': {
           'models': ['__main__'],
           # If no default_connection specified, defaults to 'default'
           'default_connection': 'default',
       }
   }
}
config 配置文件

config_file : Optional[str]:指向与上面示例格式相同的配置文件的路径,文件拓展名可以是.json.yml(如果安装了PyYAML)

数据库 URL

db_url : Optional[str]:使用 DB_URL 字符串。详情参见 DB_URL

mudules 模块

modules : Optional[Dict[str, Iterable[Union[str, ModuleType]]]]key: [list_of_modules] 定义了一个用于配置 "app" 实例和 module 模块的字典,可以帮助框架在运行时找到必要的模块及其对应的模型。

生成 schema

generate_schemas : bool:为True 则在注册时立即生成 schema。只对开发环境或在内存中运行的 SQLite 数据库有用。

添加自动化异常处理机制

add_exception_handlers : bool:为True 将在程序中添加自动化异常处理机制。不建议在生产环境中使用,可能会泄露数据。

时区感知

use_tz : bool:布尔值,设置默认情况下是否使用时区感知功能。

时区设置

timezone : str:时区设置,默认为 UTC

Raises 抛出异常
关闭 orm

ConfigurationError-适用于所有配置报错

async static close_orm()
返回值

Returns Type: None

官方源代码直通车: [source]

初始化 orm
async init_orm()

官方源代码直通车: [source]

返回值

Returns Type: None

tortoise.contrib.fastapi.register_tortoise(app,
    config=None,
    config_file=None,
    db_url=None,
    modules=None,
    generate_schemas=False,
    add_exception_handlers=False
)

官方源代码直通车: [source]

在 FastAPI 应用程序中注册 startup 启动和 shutdown 关闭事件以设置和销毁 Tortoise-ORM。

你可以仅用configconfig_file(db_url, modules)中任意一个来注册 Tortoise-ORM。

register_tortoise 方法注册 tortoise-orm

参数
app 实例

app : FastAPI: FastAPI 应用程序实例。

config 配置

config : Optional[dict]:包含配置文件的字典。

示例:

{
   'connections': {
       # Dict format for connection
       'default': {
           'engine': 'tortoise.backends.asyncpg',
           'credentials': {
               'host': 'localhost',
               'port': '5432',
               'user': 'tortoise',
               'password': 'qwerty123',
               'database': 'test',
           }
       },
       # Using a DB_URL string
       'default': 'postgres://postgres:qwerty123@localhost:5432/events'
   },
   'apps': {
       'models': {
           'models': ['__main__'],
           # If no default_connection specified, defaults to 'default'
           'default_connection': 'default',
       }
   }
}
config 配置文件

config_file : Optional[str]:指向与上面示例格式相同的配置文件的路径,文件拓展名可以是.json.yml(如果安装了PyYAML)

数据库 URL

db_url : Optional[str]:使用 DB_URL 字符串。详情参见 DB_URL

mudules 模块

modules : Optional[Dict[str, Iterable[Union[str, ModuleType]]]]key: [list_of_modules] 定义了一个用于配置 "app" 实例和 module 模块的字典,可以帮助框架在运行时找到必要的模块及其对应的模型。

生成 schema

generate_schemas : bool:为True 则在注册时立即生成 schema。只对开发环境或在内存中运行的 SQLite 数据库有用。

添加自动化异常处理机制

add_exception_handlers : bool:为True 将在程序中添加自动化异常处理机制。不建议在生产环境中使用,可能会泄露数据。

Raises 抛出异常

ConfigurationError-适用于所有配置报错

返回值

Returns Type: None

**欢迎请作者喝杯奶茶!**😘😘😘😘

FastAPI是一个用于构建Web API的高性能Python框架,而Tortoise-ORM是一个轻量级的 ORM,它提供了一个简洁的方式来操作数据库。对于RBAC(Role-Based Access Control,基于角色的访问控制)权限管理的设计实现,我们可以结合这两个工具构建一个安全性较高的系统: 1. **模型设计**: - 创建用户模型(User),包含基本信息如用户名、密码等,并关联到用户的角色(Role)。 ```python class User(models.Model): username = models.CharField(...) password = models.CharField(...) role = models.ForeignKey(Role, on_delete=models.CASCADE) ``` 2. **角色模型**(Role): - 定义不同的角色,例如管理员、普通用户等,每个角色可能有不同的权限集。 ```python class Role(models.Model): name = models.CharField(unique=True) permissions = JSONField() # 使用JSONField存储权限信息 ``` 3. **权限管理**: - 对于每一个API路由,可以添加装饰器来检查用户是否有执行该操作的必要权限。使用Tortoise-ORM查询用户的role并判断其permissions是否包含了对应的操作。 ```python from fastapi import Depends, HTTPException, status def has_permission(permission: str, user: User = Depends(get_current_user)): if permission not in user.role.permissions: raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail="Permission denied") ``` 4. **中间件`get_current_user`**: - 可能需要自定义中间件函数,从请求头或会话中获取当前登录的用户。 5. **授权逻辑**: - 用户登录成功后,服务器返回带有用户信息的JWT(JSON Web Token),在处理每个请求时验证token并加载用户数据。 6. **注册服务**: - 提供用户注册、登录、角色分配等功能,更新或删除用户角色时同步更新权限。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fenderisfine

蟹蟹你的奶茶😘

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值