FastAPI如何区分多环境:开发/测试/预发布/生产环境

news2024/11/17 17:44:02

1 缘起

开始用FastAPI开发项目,
区分环境是部署的第一步,因此,需要区分dev/test/pre/prod等环境,
而FastAPI刚好提供了读取环境配置文件的参数,可以在启动服务时指定环境配置文件的路径,
参数为env_file,读取env_file的模块为python-dotenv,
需要手动安装:

pip install python-dotenv

有两种使用方式:
(1)run方法中配置:env_file=file_path
(2)Docker中使用:“–env_file”, “file_path”
分享如下,帮助需要使用FastAPI开发的读者轻松应对环境划分。

2 应用

2.1 添加环境文件

deploy/dev.env
在这里插入图片描述

  • 文件内容
    格式:key = value
    读取到的数据都是str类型,因此,int类型的数据记得转换,
    如果value为空字符串,读取到的数据为None,因此,只需校验None。
REDIS_HOST = "192.168.179.128"
REDIS_PORT = 6379

2.2 配置环境参数

使用启动参数:env_file,配置文件路径

if __name__ == "__main__":
    env_file_path = "deploy/prod.env"
    uvicorn.run(host="0.0.0.0", port=8000, app="main:app", reload=True, env_file=env_file_path)

2.3 如何获取配置的内容

import os

REDIS_HOST = os.getenv("REDIS_HOST")
REDIS_PORT = int(os.getenv("REDIS_PORT"))

3 原理

3.1 启动方法run

uvicorn启动方法run的参数有很多,源码如下图所示,
找到我们需要的env_file,用于配置环境文件路径。
位置:uvicorn.main.run
在这里插入图片描述
当env_file不为空时,读取env_file的方法为:load_dotenv
在这里插入图片描述

load_dotenv的方法源码如下,通过源码可知,
具体的读取逻辑实在方法:set_as_environment_variables中。
位置:dotenv.main.load_dotenv

在这里插入图片描述

set_as_environment_variables方法源码如下图所示,
由源码可知,从env_file获取的数据通过os.environ写入环境配置,
因此,可以通过os.getenv(key_name)获取对应的值。

位置:dotenv.main.DotEnv.set_as_environment_variables
在这里插入图片描述

4 小结

(1)FastAPI提供的启动参数众多,包括环境配置,通过参数env_file传入,如果是Dockerfile,则使用–env_file传参;
(2)读取env_file文件的模块为python-dotenv;
(3)获取的数据均为string类型,如有其他类型的数据,注意转换数据类型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/486101.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【前端技术】Vue3 01:初识 Vue.js

Vue 可以说是非常流行了,至少在国内是这样,他是个轻量级的 JavaScript 框架,非常适合构建大型和中小型的 Web 应用程序,如果想和前端打交道,应该绕不过这个框架吧。 目录 1 Vue.js 介绍 2 IDE 选择 2.1 vscode 2.…

libfacedetection 人脸检测库的基本使用

目录 1、源码下载 2、编译 3、构建工程 4、个人总结 运行总结: 与CascadeClassifier级联分类器 人脸检测 对比: 1、源码下载 直接从github上克隆项目仓库。 git clone https://github.com/ShiqiYu/libfacedetection.git2、编译 这个项目使用了cmake脚本&#…

【LeetCode】413. 等差数列划分

413. 等差数列划分(中等) 思路 由于题目求的是等差数列 ,很自然想到子数组一定满足 nums[i] - nums[i-1] nums[i-1] -nums[i-2]; 。然而我们对于 dp 数组的定义通常是以 i 结尾,满足某些条件的子数组数量,而等差数组可…

【LeetCode】300. 最长递增子序列

300. 最长递增子序列(中等) 方法一:动态规划 思路 通常来说,子序列不要求连续,而子数组或子字符串必须连续;对于子序列问题,第一种动态规划方法是,定义 dp 数组,其中 dp[…

PHP语言基础

🌱博客主页:大寄一场. 😘博客制作不易欢迎各位👍点赞⭐收藏➕关注 目录 前言 一、变量和数据类型 二、运算符和表达式 三、条件语句 四、循环语句 前言 PHP是一种非常流行的开源服务器端脚本语言,广泛用于Web开发…

Python sys模块

sys:使用或维护解释器 版本信息 Python版本 >>> sys.version 3.10.3 (tags/v3.10.3:a342a49, Mar 16 2022, 13:07:40) [MSC v.1929 64 bit (AMD64)]系统版本 >>> sys.platform win32 >>> 解释器版本 >>> sys.hexversion 50988016 >&g…

TypeScript 基本概念

TypeScript 是什么? 目标:能够说出什么是 TypeScript TS 官方文档 TS 中文参考 - 不再维护 TypeScript 简称:TS,是 JavaScript 的超集,JS 有的 TS 都有 TypeScript Type JavaScript(在 JS 基础之上…

Linux下文件的增删查改

1.什么是文件 文件是计算机文件属于文件的一种,与普通文件载体不同,计算机文件是以计算机硬盘为载体存储在计算机上的信息集合。文件文件内容文件属性。 2.文件的创建 文件的创建分为两种指令:touch和mkdir touch是用来创建普通文件的&am…

(C语言版)力扣(LeetCode)数组相关面试题OJ题解析

数组相关面试题 26. 删除有序数组中的重复项题目说明示例一示例二提示解析 27.移除元素题目说明示例1示例2提示解析解法一解法二 88. 合并两个有序数组题目示例一示例二示例三提示解析 结语 26. 删除有序数组中的重复项 题目 给你一个 升序排列 的数组 nums ,请你…

Verilog HDL——Modelsim仿真

常用testbench语法 $finish 和 $stop : $finish任务用于终止仿真并跳出仿真器;$stop任务则用于中止仿真。timescale [time_unit] / [time_precision] :time_unit指定计时和延时的测量单位,time_precision则是指定仿真器的精度。#…

7.3 有源滤波电路(1)

对信号的频率具有选择性的电路称为滤波电路,它的功能是使特定频率范围内的信号通过,而阻止其它频率信号通过。有源滤波电路是应用广泛的信号处理电路。 一、滤波电路的基础知识 1、滤波电路的种类 通常,按照滤波电路的工作频带为其命名&am…

C语言从入门到精通第17天(指针和数组联用)

指针和数组联用 不同类型指针变量之间的区别数组的指针指针数组 不同类型指针变量之间的区别 在了解数组和指针联用之前,我们先对指针变量进行补充。我们对比一下int *p1和char *p2的区别? 相同点: 都是指针变量都是用来保存一个内存地址编…

中级软件设计师备考---软件工程1

目录 经典的模型敏捷开发方法【的分类】信息系统开发方法【的分类】结构化设计---内聚与耦合结构化设计---系统结构/模块结构 需求的分类 经典的模型 瀑布模型:最早的一类、适用于需求明确的项目、结构化的典型代表 原型模型:先构造一个建议的系统原型再…

数据治理服务及数据治理应用解决方案

本资料来源公开网络,仅供个人学习,请勿商用,如有侵权请联系删除。 一、数据治理概述 (一) 数据治理概念 数据治理是指将数据作为组织资产围绕数据全生命周期而展开的相关管控活动、绩效和风险管理工作的集合,以保障数据及其应用…

Nmap入门到高级【第十章】

预计更新Nmap基础知识 1.1 Nmap简介和历史 1.2 Nmap安装和使用方法 1.3 Nmap扫描技术和扫描选项 Nmap扫描技术 2.1 端口扫描技术 2.2 操作系统检测技术 2.3 服务和应用程序检测技术 2.4 漏洞检测技术 Nmap扫描选项 3.1 扫描类型选项 3.2 过滤器选项 3.3 探测选项 3.4 输出选项…

中间件漏洞(二)nginx解析漏洞

目录 1.漏洞原理分析 2. 利用条件 3. 漏洞复现 1.漏洞原理分析 Nginx的解析漏洞的出现和Nginx的版本没有关系,漏洞的产生是由于php配置问题导致的。 2. 利用条件 # php.ini cgi.fix_pathinfo1 # php-fpm.conf security.limit_extensions 分别解释一下cgi.fix_…

Sentinel --- 隔离和降级、授权规则、规则持久化

一、隔离和降级 限流是一种预防措施,虽然限流可以尽量避免因高并发而引起的服务故障,但服务还会因为其它原因而故障。 而要将这些故障控制在一定范围,避免雪崩,就要靠线程隔离(舱壁模式)和熔断降级手段了…

HTTP加密

文章目录 原理方式证书 原理 HTTP HTTPS TLS/SSL(数据的加密解密层) HTTP是应用层的协议,当应用层向下访问的时候并不是直接访问到socket层,而是先通过TLS/SSL加密解密层后再进行后续工作。此时得到的协议就是HTTPS。 举个例…

【五一创作】排序篇:冒泡排序,快速排序的递归与非递归实现(C语言)

目录 前言: 一:冒泡排序 基础思路 完整排序 时间复杂度分析 二:递归实现快速排序 基础思路 单趟排序 (1)双向扫描法 (2)挖坑法 (3)前后指针法(推荐这种) 完整排序 时间复杂度分析 优化 (1)三数取中 (2)小区间优化 三&#xf…

基于Vue3+TS+Vite+Cesium创建项目

基于Vue3TSViteCesium创建项目 基于Vite构建项目安装配置Cesium创建Cesium三维视图运行结果 随着近几年社会的发展,人们对三维可视化的需求也是越来越多,三维GIS如今真的越来越火了,对于做GIS前端开发的人员来说,Cesium开发是绝对…