FastAPI项⽬结构组织,⼯⼚模式创建
FastAPI 项⽬结构组织,⼯⼚模式创建
前⾔
学习Vue的时候,需要接⼝,⽽我恰巧也学习了下FastAPI,正好个⼈项⽬,试⼀下这个FastAPI框架。
然⽽现在关于FastAPI,搜索资料基本都是官⽹翻译⼀下,要么就是官⽅推荐的
全栈项⽬⽣成 , 对我⽬前的需求⽽⾔,太⼤了,⽽且全程⽤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__)
@ute('/')
def hello_world():
return {"Hello": "World"}
if __name__ == '__main__':
# Flask推荐命令⾏启动 flask run
app.run(host="127.0.0.1", port=8090, debug=True)flask下载
FastAPI Hello World 创建⼀个名字为main.py⽂件,注意名字为main,和启动的名字相对应
from fastapi import FastAPI
app = FastAPI()
@("/")
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
|____ // 依赖⽂件
|____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",
description="www.charmcode",
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地址:
组织代码,写博客不易,导流希望能理解。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论