zoukankan      html  css  js  c++  java
  • 【FastAPI 学习一】配置文件

    FastAPI 配置文件

    准备使用Vue + FastAPI开发一套后台管理系统,记录自己使用FastAPI的技术点。

    配置文件目录

    
    |____core                        // 项目存放一些重要的文件
    | |______init__.py
    | |____config                    // 配置文件夹
    | | |______init__.py             // 根据虚拟环境导入不同配置
    | | |____development_config.py   // 开发配置
    | | |____production_config.py    // 生成配置
    
    

    配置文件

    使用第三方依赖库pydantic验证配置文件合法性。

    pydantic官方文档 https://pydantic-docs.helpmanual.io/

    github地址 https://github.com/samuelcolvin/pydantic

    需要安装依赖pip install pydantic

    from pydantic import BaseSettings
    

    发现FastAPI作者 tiangolo 正在写一个SQLAlchemy models自动生成Pydantic models的工具
    github地址 https://github.com/tiangolo/pydantic-sqlalchemy

    区分生产和开发

    我这是一种最为直白简单的方式,区分生产和开发环境, 缺点是所有的配置都写在代码里面了。

    import os
    
    # 获取环境变量
    env = os.getenv("ENV", "")
    if env:
        # 如果有虚拟环境 则是 生产环境
        print("----------生产环境启动------------")
        from .production_config import settings
    else:
        # 没有则是开发环境
        print("----------开发环境启动------------")
        from .development_config import settings
    
    

    还有一种了,就是就是配置文件固定读取一个目录下文件如/etc/conf/fast_admin_conf.py或者.ini文件
    如果能读取说明为生产环境,读取不到则说明为开发环境。

    指定文件格式

    pydantic内置了很多数据类型验证,包括很多很复杂的嵌套的类型都有

    from typing import List
    from pydantic import BaseSettings, validator, IPvAnyAddress, EmailStr, AnyHttpUrl
    
    class Settings(BaseSettings):
        #
        API_V1_STR: str = "/api/admin/v1"
        # SECRET_KEY 记得保密生产环境 不要直接写在代码里面
        SECRET_KEY: str = "(-ASp+_)-Ulhw0848hnvVG-iqKyJSD&*&^-H3C9mqEqSl8KN-YRzRE"
    
        # token过期时间 60 minutes * 24 hours * 8 days = 8 days
        ACCESS_TOKEN_EXPIRE_MINUTES: int = 60 * 24 * 8
        
        # 跨域设置 验证 list包含任意http url
        BACKEND_CORS_ORIGINS: List[AnyHttpUrl] = ['http://localhost']
        
        # 验证邮箱地址格式
        FIRST_MALL: EmailStr = "wg_python@163.com"
    
    # 实例化配置对象
    settings = Settings()
    

    注意 一定要实例化配置对象,实例化的时候,才会去验证数据合法性。

    一些扩展知识

    • 为什么不用 .ini .ymal等配置文件了?

    答: 由于Python是解释性语言,把配置文件写代码里面,没什么不方便的,当然Python也可以使用.ini .ymal等配置文件。
    如Go Java等编译性语言,把配置文件直接写代码,如果仅仅只是要改动配置文件,就很不方便,就需要重新再编译打包,耗时。

    参考GitHub地址

    https://github.com/CoderCharm/fastapi-mysql-generator

    见个人博客 https://www.charmcode.cn/article/2020-07-11_FastAPI_Setting

  • 相关阅读:
    2020软件工程最后一次作业
    常用的10种算法

    赫夫曼编码
    哈希表(散列)
    查找算法
    排序算法
    递归

    软件工程最后一次作业
  • 原文地址:https://www.cnblogs.com/CharmCode/p/14191077.html
Copyright © 2011-2022 走看看