首页 » Web前端 » phpclsenv技巧_解锁FastAPI应用的秘密武器高效治理env情形变量全攻略

phpclsenv技巧_解锁FastAPI应用的秘密武器高效治理env情形变量全攻略

访客 2024-12-15 0

扫一扫用手机浏览

文章目录 [+]

FastAPI 项目常日利用 .env 文件来配置项目环境变量,这也是推举的做法。
同时 FastAPI 框架集成了 pydantic 模块,供应了直接解析 .env 文件以及参数校验的功能,使得利用 .env 来做项目配置变得极为简便。
下面让我们一起来试试吧,本文项目构造如下:

项目构造

phpclsenv技巧_解锁FastAPI应用的秘密武器高效治理env情形变量全攻略

1. 创建 .env 配置文件,添加配置项

项目创建后,先在项目根目录下创建一个 .env 文件,并添加几个配置项供接下来考试测验用,内容如下,紧张关注 enableApiDocs 设置即可,我们用它来掌握交互式 API 文档的开和关:

phpclsenv技巧_解锁FastAPI应用的秘密武器高效治理env情形变量全攻略
(图片来自网络侵删)

# .env# 默认是忽略大小写的,有供应配置DEBUG=trueenableApiDocs=NoneTITLE="FastAPI"DESCRIPTION="FastAPI 文档明细描述"VERSION="1.0.0.1"

.env 中内容的大小写是可以设置的,默认值是 None,不区分大小写:

大小写设置

2. 从 BaseSettings 派生 AppSettings 子类

BaseSettings 继续自 BaseModel,从 BaseModel 派生后就能轻松利用 pydantic 供应的校验功能了。

类关系图

# setting.pyfrom pydantic import field_validatorfrom pydantic_settings import BaseSettingsfrom typing import Optionalclass AppSettings(BaseSettings): debug: bool = False enableApiDocs=None title: str description: str version: str # Config 内部类,把稳必须是这个类名才会被 pydantic 识别到 # 这样 pydantic 就会按这样的配置去加载配置文件 class Config: env_file = ".env" env_file_encoding = 'utf-8' @field_validator('enableApiDocs') def enable_api_docs_none_check(cls, v: str) -> Optional[str]: if v and v.lower() == 'none': return None return v @field_validator('title') def title_len_check(cls, v: str) -> Optional[str]: if v and len(v) < 7: return 'FastAPI' return v

把稳上面代码中,Config 内部类不是必须的,也可以通过参数直接指定,这样就不用该类了:

app_settings = AppSettings(_env_file=".env", _env_file_encoding="utf-8")

3. 利用校验

通过 @field_validator('字段') 对指定的字段设置校验。

须要把稳的是:不同版本的校验装饰器用法可能是不一样的,此处用的是 pydantic 2.7.1,校验装饰器是 @field_validator。

.env 中的 enableApiDocs 用于掌握 API 文档是否开启,不过从.env中读取的内容会被当作字符对待,以是须要把字符 'None' 转换成 None,这个可以通过 @field_validator 来实现,如下。

@field_validator('enableApiDocs') def enable_api_docs_none_check(cls, v: str) -> Optional[str]: if v and v.lower() == 'none': return None return v

4. 利用 AppSettings

from fastapi import FastAPIfrom setting import AppSettingsfrom functools import lru_cache# 本文利用内部类 Config 指定配置文件# app_settings = AppSettings()# 但也可以直接指定配置文件,这时就不用写 Config 内部类了# app_settings = AppSettings(_env_file=".env", _env_file_encoding="utf-8")## 实例化 FastAPI,代表当前做事进程app = FastAPI(debug=get_settings().debug, docs_url=get_settings().enableApiDocs, #只关了swagger-ui, redoc仍可用 title=get_settings().title, description=get_settings().description, version=get_settings().version)# 通过 @app.get 装饰器创建一个 API 端点路由@app.get("/")async def root(): return {"message": "Hello World"}# 带路径参数的 API 要求@app.get("/hello/{name}", tags=['新的接口分组'], summary="sayHello", description="sayHello 接口功能描述", response_description="接口返回值描述")async def say_hello(name: str): return {"message": f"Hello {name}"}# 代码模块在当前路径直接运行时被实行,而被导入时则不会实行if __name__ == "__main__": import uvicorn uvicorn.run(app='main:app', host="127.0.0.1", port=8000, reload=True)

运行效果如下,可以看到和预期的一样,swagger ui 被关闭,redoc 仍可用。

只关了 swagger-ui 的情形

要想同时关闭 swagger-ui 和 redoc,只需按如下修正即可:

app = FastAPI(debug=get_settings().debug, # docs_url=get_settings().enableApiDocs, openapi_url=get_settings().enableApiDocs, title=get_settings().title, description=get_settings().description, version=get_settings().version)

再次运行,可以看到两者均被关闭了,效果如下:

同时关闭 redoc 和 swagger-ui

这样往后想要开启和关闭,只需修正 .env 中的配置即可,不用修正源代码啦。

标签:

相关文章

74,介绍数字背后的历史与战略布局

在历史的长河中,数字往往承载着丰富的象征意义和战略价值。今天,我们就来探讨一个特殊的数字——74,它不仅是一个普通的阿拉伯数字,更...

Web前端 2024-12-17 阅读0 评论0

BO大数据,引领未来商业发展的智慧引擎

随着互联网技术的飞速发展,大数据已成为当今时代最热门的词汇之一。BO大数据,作为我国大数据领域的重要力量,正引领着未来商业发展的潮...

Web前端 2024-12-17 阅读0 评论0

58大数据解读,介绍中国房地产市场新趋势

近年来,随着互联网技术的飞速发展,大数据在各个行业中的应用越来越广泛。在房地产市场,58大数据凭借其强大的数据处理和分析能力,为行...

Web前端 2024-12-17 阅读0 评论0

CD大数据,介绍数字时代的数据力量

随着互联网的飞速发展,大数据已经成为当今世界最热门的词汇之一。在这个信息爆炸的时代,数据已经成为了一种新的资源,而CD大数据则在这...

Web前端 2024-12-17 阅读0 评论0