• FastAPI 项目结构组织,工厂模式创建


    FastAPI 项目结构组织,工厂模式创建

    前言

    学习Vue的时候,需要接口,而我恰巧也学习了下FastAPI,正好个人项目,试一下这个FastAPI框架。
    然而 现在关于FastAPI,搜索资料基本都是官网翻译一下,要么就是官方推荐的
    全栈项目生成 https://github.com/tiangolo/full-stack-fastapi-postgresql, 对我目前的需求而言,太大了,而且全程用docker,
    对我这个初学FastAPI的新手来说很不友好。于是我自己花了点时间, 详细看了一遍文档。然后自己组织了一遍代码。

    项目大了之后,可参考项目生成的目录结构

    框架特点

    按照国际惯例扯一下(复制一下)

    算了,自己看官网把,FastAPI文档,是我目前看起来写得最漂亮的,至少我喜欢那个文档的UI, 还有Django文档UI,再就是各种细节提醒,
    从基础到进阶,抛开各种性能不说(我也没测试,只是看别人写的测试文章)。

    自带的Swagger交互文档, 集成的pydantic数据验证,用起来是真的香呀!

    FastAPI 和 Flask Hello World 的对比

    由于FastAPI官网的Demo看起来和Flask一样,所以我就参考Flask创建项目。

    • Flask Hello World 创建一个名字为app.py文件,写入以下代码
    # flask 1.x版本 后支持默认返回json数据,不需要jsonify
    from flask import Flask
    
    app = Flask(__name__)
    
    
    @app.route('/')
    def hello_world():
        return {"Hello": "World"}
    
    
    if __name__ == '__main__':
        # Flask推荐命令行启动 flask run
        app.run(host="127.0.0.1", port=8090, debug=True)
    
    • FastAPI Hello World 创建一个名字为main.py文件,注意名字为main,和启动的名字相对应
    
    from fastapi import FastAPI
    
    app = FastAPI()
    
    
    @app.get("/")
    async def read_root():
        return {"Hello": "World"}
    
    if __name__ == "__main__":
        import uvicorn
        # 官方推荐是用命令后启动 uvicorn main:app --host=127.0.0.1 --port=8010 --reload
        uvicorn.run(app='main:app', host="127.0.0.1", port=8010, reload=True, debug=True)
    
    

    FastAPI 工厂模式创建应用

    首先就是项目组织结构, 直接上目录结构

    .
    |_FastDemo                      // 主项目文件
    | 
    |___api
    | |_____init__.py               // (重点)创建工厂模式生成app对象, 全局的操作基本在这里配置
    | |____v1
    | |____database.py              // 数据库对象
    | |____schemas.py               // 验证参数       (可放到对应模块内)
    | |____models.py                // models模型类型 (可放到对应模块内)
    | |____home                     // 项目模块文件
    | | |____home.py
    | | |______init__.py
    | | |____home_backup.py
    | |____category
    | | |______init__.py
    | |______init__.py
    | |____profile
    | | |____profile.py
    | | |______init__.py
    | |____goods
    |   |____goods.py
    |   |____goods_backup.py
    |____test                     // 测试用例
    | |______init__.py
    | |____test_sqlite.py
    |____utils                    // 工具类
    | |______init__.py
    | |___custom_exc.py           // 自定义异常
    | |___response_code.py        // 自定义返回的状态码
    |____setting                  // 配置文件夹
    | |______init__.py            // 根据虚拟环境 导出不同配置
    | |____development_config.py  // 开发环境配置
    | |____production_config.py   // 生产环境配置
    |____extensions               // 扩展文件
    | |______init__.py            // 导出扩展文件
    | |____logger.py              // 日志配置
    |____alembic                  //   alembic  初始化自动生成的 
    | |____script.py.mako
    | |____env.py
    | |____versions
    | |____README
    |____alembic.ini              // alembic  初始化自动生成的 
    |____.gitignore
    |____requirements.text        // 依赖文件
    |____main.py                  // 项目启动文件
    |____mall_data.sql            // mysql insert 数据
    |____mall_table.sql           // msyql表格 
    |____README.md
    |____Pipfile
    |____Pipfile.lock
    
    

    主要在api/init.py文件下,生成FastAPI对象

    
    # 导入对象
    from fastapi import FastAPI, Request, status
    from api.v1 import api_v1
    
    def create_app():
        app = FastAPI(
            title="CharmCode.cn",
            description="https://www.charmcode.cn",
            version="0.1.1",
            docs_url="/api/v1/docs",  # 自定义文档地址
            openapi_url="/api/v1/openapi.json", # 
            redoc_url=None,   # 禁用redoc文档
        )
        
        # 导入路由, 前缀设置
        app.include_router(
            api_v1,
            prefix="/api/v1/mall",
        )
        
        # 异常捕获
        register_exception(app)
        
        # 跨域设置
        register_cors(app)
    
        return app
    
    

    代码github地址查看我个人博客:

    https://www.charmcode.cn/article/2020-06-24_FastAPI_factory

    组织代码,写博客不易,导流希望能理解。

  • 相关阅读:
    如何创建支持64位的安装程序
    SharePoint Server 2013开发之旅(四):配置工作流开发和测试环境
    SharePoint Server 2013开发之旅(三):为SharePoint Server配置App开发、部署、管理环境
    SharePoint Server 2013开发之旅(二):使用在线的开发人员网站进行SharePoint App开发
    SharePoint Server 2013开发之旅(一):新的开发平台和典型开发场景介绍
    在WPF应用程序中利用IEditableObject接口实现可撤销编辑的对象
    一个在ASP.NET中利用服务器控件GridView实现数据增删改查的例子
    关于未捕获异常的处理(WPF)
    牛刀小试:使用Reactive Extensions(Rx),对短时间内多次发生的事件限流
    如何对SharePoint网站进行预热(warmup)以提高响应速度
  • 原文地址:https://www.cnblogs.com/CharmCode/p/13188820.html
Copyright © 2020-2023  润新知