fastapi(二十)-大型项目文件结构
如果需要构建应用程序或api,很少将所有的内容都放入一个文件中。
fastapi提供了一个方便的工具可灵活的构建应用。(类似于flask的蓝图)
假如文件结构如下:
.
├── app
│ ├── init.py
│ ├── main.py
│ └── routers
│ ├── init.py
│ ├── items.py
│ └── users.py
- 该app目录包含所有内容。
- 该app目录有一个空文件app/init.py。
- 因此,该app目录是“ Python包”(“ Python模块”的集合)。
- 该app目录还有一个app/main.py文件。
- 由于它位于Python软件包目录中(因为存在一个文件__init__.py),因此它是该软件包的“模块”:app.main。
- 有一个子目录app/routers/。
- 子目录app/routers也有一个空文件__init__.py。
- 因此,它是一个“ Python子包”。
- 该文件app/routers/items.py在旁边app/routers/init.py。
- 因此,这是一个子模块:app.routers.items。
- 该文件app/routers/users.py在旁边app/routers/init.py。
- 因此,这是一个子模块:app.routers.users。
APIRouter
- 因此,这是一个子模块:app.routers.users。
from fastapi import APIRouterrouter = APIRouter()@router.get("/users/", tags=["users"])
async def read_users():return [{"username": "Foo"}, {"username": "Bar"}]@router.get("/users/me", tags=["users"])
async def read_user_me():return {"username": "fakecurrentuser"}@router.get("/users/{username}", tags=["users"])
async def read_user(username: str):return {"username": username}
可以将APIRouter视为“迷你FastAPI”类。
支持所有相同的选项。
所有相同的参数,响应,依赖性,标签等。
然后在main文件中:
from fastapi import Depends, FastAPI, Header, HTTPExceptionfrom .routers import items, usersapp = FastAPI()async def get_token_header(x_token: str = Header(...)):if x_token != "fake-super-secret-token":raise HTTPException(status_code=400, detail="X-Token header invalid")app.include_router(users.router)
app.include_router(items.router,prefix="/items",tags=["items"],dependencies=[Depends(get_token_header)],responses={404: {"description": "Not found"}},
)
fastapi(二十)-大型项目文件结构相关推荐
- Gradle学习(二十)——多项目构建详解
跨项目配置 虽然子项目之间可以完全隔离单独配置,但是子项目直接有相同特征的情况也是很常见的,多个项目共享配置是更好的选择. 配置和执行 在gradle学习-十八-构建的生命周期这一篇中我们已经讲过Gr ...
- ballerina 学习二十六 项目docker 部署 运行(二)
ballerina 从发布,到现在官方文档的更新也是很给力的,同时也有好多改进,越来越好用了 可以参考官方文档 https://ballerina.io/learn/by-guide/restful- ...
- 搭建大型分布式服务(二十五)如何将应用部署到TKE容器集群?
系列文章目录 文章目录 系列文章目录 前言 一.本文要点 二.开发环境 三.部署容器服务 1.制作Nginx镜像,用来打包前端web服务. 2.创建工作负载,用来运行前端web服务. 3.配置serv ...
- Vue2+VueRouter2+webpack 构建项目实战(二)目录以及文件结构
Vue2+VueRouter2+webpack 构建项目实战(二)目录以及文件结构 2017年8月补充 2016年,我写了一系列的 VUE 入门教程,当时写这一系列博文的时候,我也只是一个菜鸟,甚至在 ...
- (转载)Android项目实战(二十八):使用Zxing实现二维码及优化实例
Android项目实战(二十八):使用Zxing实现二维码及优化实例 作者:听着music睡 字体:[增加 减小] 类型:转载 时间:2016-11-21 我要评论 这篇文章主要介绍了Android项 ...
- Laravel大型项目系列教程(二)之用户管理
Laravel大型项目系列教程(二) 一.前言 本节教程将大概实现用户的注册.修改个人信息.管理用户功能 二.Let's go 1.创建用户注册视图 <span style="font ...
- Android项目实战(二十二):启动另一个APP or 重启本APP
Android项目实战(二十二):启动另一个APP or 重启本APP 原文:Android项目实战(二十二):启动另一个APP or 重启本APP 一.启动另一个APP 目前公司项目需求,一个主AP ...
- (100)详细描述一个你做过的项目, 面试必问(二十四)(第20天)
(100)详细描述一个你做过的项目, 面试必问(二十四)(第20天) 1 文章目录 1)文章目录 2)FPGA初级课程介绍 3)FPGA初级课程架构 4)详细描述一个你做过的项目, 面试必问(二十四) ...
- Android项目实战(二十):浅谈ListView悬浮头部展现效果
Android项目实战(二十):浅谈ListView悬浮头部展现效果 原文:Android项目实战(二十):浅谈ListView悬浮头部展现效果 先看下效果:需求是 滑动列表 ,其中一部分视图(粉丝数 ...
最新文章
- CR--同事分享学习
- HTTP长连接和短连接以及推送服务原理(转)
- innodb_force_recovery的值意思
- vue中v-model原理
- gRPC .NET Core跨平台学习
- ul 响应式 布局_HTML5中响应式布局怎么弄??
- loading窗口动画 web_在页面未加载完之前显示loading动画
- java excel导出 模板_Java Excel 导出 模板
- 大话设计模式读书笔记10----外观模式(Facade)
- 湖南卫视小年夜春晚-2013湖南卫视小年夜直播【直播视频现场高清完整版____
- TensorFlow 资源大全中文版
- AtCoder Beginner Contest 182B
- 用ASP.NET MVC自己管理自己的View:ASP.NET MVC File Management 【转】
- 语音通知事件提醒功能实现流程
- ASP.NET Core使用微软官方类库实现汉字简繁切换以及转拼音
- c语言如何生成csv文件格式,生成 csv 文件
- Blowfish加密算法
- 微信公众号开发之生成带参数的二维码
- WINVNC源码阅读(三)
- Android最佳实践之性能 - 电池续航时间优化