fastapi_No.25_获取配置项

news2024/9/22 6:48:01

文章目录

    • 方式1:隐藏在环境变量中
      • 配置环境变量
        • Windows中配置环境变量
        • Linux中配置环境变量
      • 在代码中获取环境变量
    • 方式2:隐藏在配置文件中
      • 装包
      • 在代码中获取配置文件内容

在之前的代码中,像数据库连接信息等敏感信息,都直接写在代码中,这种方式是不安全的。本篇文章记录两种FastAPI中隐藏配置信息的方法。

方式1:隐藏在环境变量中

在电脑的环境变量中配置需要隐藏的配置信息。

配置环境变量

Windows中配置环境变量

在这里插入图片描述

Linux中配置环境变量

export DBURL="mysql+pymysql://root:123456@127.0.0.1:3306/testdb"

在代码中获取环境变量

import os
def get_dburl_from_env(key):
    '''
    获取系统环境变量中名为key的变量值,
    当不存在时返回None
    :param key:为变量名
    :return :key对应的value,不存在时返回None
    '''
    value = os.getenv(key,None)
    return value

class NoValueException(Exception):
    pass

if __name__ == "__main__":
    db_url = get_dburl_from_env("DBURL")
    if db_url is None:
        raise NoValueException
    print(db_url)
    test_url = get_dburl_from_env("TEST")
    if test_url is None:
        raise NoValueException
    print(test_url)

在这里插入图片描述

方式2:隐藏在配置文件中

将配置信息存放在配置文件中,通过读取配置文件获取配置信息。
例如:
在这里插入图片描述

装包

安装python-dotenv包。

pip install python-dotenv

在代码中获取配置文件内容

'''
方法2:
将隐私内容存放在本地配置文件中,通过读取配置文件获取隐私配置文件
'''
from functools import lru_cache
from pydantic import BaseSettings
from fastapi import FastAPI,Depends

class Settings(BaseSettings):
    # 类似BaseModel一样,配置各个配置项的内容限制和数据类型
    dburl:str

    class Config:
        # env_file配置文件的路径
        env_file = "./No23_配置/config/.env"
        
app = FastAPI()

@lru_cache
def get_settings():
    # 缓存配置项,避免频繁读取配置文件
    return Settings()

@app.get("/")
def get_home(settings:Settings=Depends(get_settings)):
    return {
        "db_url":settings.dburl
    }


if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app="main-file:app",host="127.0.0.1",port=8080,reload=True)

在这里插入图片描述

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

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

相关文章

每日一题 —— 882. 细分图中的可到达节点

882. 细分图中的可到达节点 给你一个无向图(原始图),图中有 n 个节点,编号从 0 到 n - 1 。你决定将图中的每条边 细分 为一条节点链,每条边之间的新节点数各不相同。 图用由边组成的二维数组 edgesedgesedges 表示&…

182:vue+openlayers 使用d3实现地图区块呈现不同颜色的效果

第182个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers中加载解析geojson文件,同时利用d3的颜色功能,使得美国每个州呈现出不同的颜色区块,方便识别。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意如果OpenStreetMap无法加载,…

UNIX环境高级编程_文件IO_文件描述符

这篇文章记录文件描述符,下一篇文章记录文件描述表。 1 文件描述符 先说说什么是文件IO。文件的IO就是文件的输入输出,也就是文件的读写。读和写是以CPU为参考的,从CPU向文件中写入数据,就是写操作;从文件中读取数据…

Aviation turbofan starting model

Aviation turbofan starting model 涡扇发动机(Turbofan)即涡轮风扇发动机,来源于涡轮喷气发动机,主要是为了解决涡轮喷气发动机耗油率过高的问题。其结构特点是流过风扇的空气一部分进入压气机(内涵道),一部分进入由压气机外部通道(外涵道)流过,这部分气流不经过燃烧…

01 - Linux系统概要(再论计算机系统)

---- 整理自狄泰软件唐佐林老师课程 1. 再论计算机系统 计算机系统由躯体和灵魂两部分组成 – 躯体:构成计算机系统的电子设备(硬件) – 灵魂:指挥躯体完成动作的指令序列(软件) 躯体核心:中央…

2022-12-05 优化el-tree懒加载选人树

今后就都拼抵抗力了嗷 需求描述 此处有一棵懒加载树(可选人),右侧展示已选中的人。且父子关联,可以通过选中一个部门勾选所有子节点。问题是,选中父节点,当子节点未加载时,是获取不到勾选的子…

Redis配置、持久化以及相命令

Redis 什么是Redis Redis(远程字典服务器)是一个开源的、使用C语言编写的NoSQL数据库 Redis 基于内存运行并支持持久化,采用key-value(键值对)的存储形式,是目前分布式架构中不可或缺的一环。 Redis服务…

新来的性能测试工程师工资25K,看了他做的性能测试,那才真叫牛

一直深耕于互联网行业的测试工作,前期测试主要以项目为主,也就是 一个人负责2-3个项目 的测试工作,当然包括项目上功能、自动化和性能等一切测试工作。 我有几个朋友也在互联网大厂工作,从他们当中了解到其实真正的互联网大厂&…

【前端CSS】网站都变成灰色了,它是怎么实现的?(含源代码解析)

目录:网站都变成灰色了,它是怎么实现的?一、前言二、如何实现的三、代码的理解3.1 CSS3 filter(滤镜) 属性3.2 定义和使用3.2.1 CSS动画演示3.2.2 JS语法演示3.3 浏览器支持3.4 CSS 语法3.5 Filter 函数四、实例展示4.1 模糊实例4.2 Brightne…

3、JSP——Servlet、IDEA创建Web项目、IDEA创建JSP页面

目录 一、Servlet的概念 二、Servlet的作用 三、IDEA中创建Web项目 四、手动部署 五、自动部署 1、IDEA部署Tomcat服务器 2、IDEA部署JavaWeb项目 3、JSP页面 一、Servlet的概念 (1)Servlet:Server Applet的简称,是运…

云服务器配置Code-Server环境并运行Python和C++

目录1、前言2、部署流程2.1 前置准备2.2 运行docker安装Code-Server3、运行Code-Server3.1 配置运行环境3.2 运行Python3.3 运行C1、前言 云服务器需要配置C开发环境,了解到有code-server这个VsCode提供的云端服务,因此选择在云服务器上部署。 2、部署流…

D3--FPGA IIC接口通信2022-12-05

1.IIC简介 1.1 IIC概述 IIC即 Inter-Integrated Circuit(集成电路总线),是由 Philips 半导体公司在八十年代初设计出来的一种简单、双向、二线制总线标准。多用于主机和从机在数据量不大且传输距离短的场合下的主从通信。主机启动总线,并产…

[附源码]计算机毕业设计少儿节目智能推荐系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Android 基础知识4-2.2常用控件提示(Toast)

效果图: 介绍: Toast是Android提供的“快显讯息”类,Toast类的使用非常简单,而且用途很多。比如,当退出应用程序时,可以用它来提示用户“需要更新”,或者当在输入框中输入文本时,可以…

含有双硫键的交联剂NHS-PEG1-SS-PEG1-NHS,NHS-SS-NHS,活性酯-双硫键-活性酯

基础产品数据(Basic Product Data): 中文名:活性酯-双硫键-活性酯 英文名:NHS-SS-NHS,NHS-PEG1-SS-PEG1-NHS 结构式(Structural): 详细产品数据(Detailed Pro…

批量查询谷歌PR权重的方法有哪些?是什么影响着谷歌PR值?

批量查询谷歌PR权重的方法有哪些? 查询谷歌PR权重最简单最最直接的方法就是使用站长工具查询,具体操作如下: 首先打开站长工具,在域名输入框输入网站的域名(一行一个); 然后勾选需要查询的功能&…

NumPy模块使用介绍

NumPy使用介绍1.NumPy科学计算库介绍和环境准备 ​ NumPy(Numerical Python)是Python的⼀种开源的数值计算扩展。提供多维数组对象,各种派⽣对象(如掩码数组和矩阵),这种⼯具可⽤来存储和处理⼤型矩阵&…

Qt下多线程的四种使用方法总结及代码示例

文章目录前言一、继承QThread,重写run()函数二、继承QObject,使用moveToThread()函数三、继承QRunnable,重写run()函数,使用QThreadPool线程池四、使用QtConcurrent的run()函数五、示例代码六、下载链接总结前言 在之前的Qt开发工…

时间序列分析的基本流程(R语言版——实验篇)

数据处理 1.导入数据&#xff08;.csv&#xff09; 能导入绝大所数形式的格式文件 ex52<-read.table("C:\\Users\\33035\\Desktop\\习题5.2数据.txt",headerT,fileEncoding GBK) #header &#xff1a;T:表示留第一行 #fileEncoding:有中文时最好改为GBK 2.对数…

MySQL---DDL

MySQL简介DDL操作 文章目录MySQL简介DDL操作数据库分类关系型数据库&#xff08;SQL&#xff09;非关系型数据库&#xff08;NOSQL&#xff09;区别DBMSMySQL简介概念特点MySQL运行机制SQL通用语法结构化查询语言分类DDL操作数据库操作表查询创建数据类型数值类型字符串类型日期…