All Async Web App with Fastapi + SQLAlchemy 2.0 + Injector + aioreactive
- install rye
- install postgresql
rye sync
(第一次运行项目时输入)rye run python src/create_tables.py
(创建数据库表)(第一次运行项目时输入)rye run python src/pre_start.py
(测试数据库连接)rye run server
运行服务器- http://127.0.0.1:8000/docs 查看openapi文档
- 建议使用vscode和配套python扩展进行开发
- 运行
rye lint
和rye fmt
格式化代码
- 全部使用协程保证并发性
- 使用aioreactive提供异步流的响应式编程支持
- 使用injector提供依赖注入支持
- fastapi提供对外的网络接口
- sqlalchemy提供数据库的orm操作
- rye管理python版本、项目依赖、脚本运行
- 用ruff和yapf进行代码格式化
项目从整体上可以划分为3层:
- common层,包含项目最基本的设置和logger模块,供其他所有模块使用
- 用来给实际业务提供功能和整体框架的基础层,基础层实现了主要的框架逻辑,具体的细节需要通过继承子类的方式,由业务层自己实现。基础层包含db, schema和source
- 业务层,用来描述实际接收攻击信息的解析方法、解析之后的数据类、数据库的表以及存储逻辑、fastapi网络接口等功能。
这里的业务具体指处理每一种蜜罐传来的信息、保存这些信息至数据库、进行数据分析、提供网络接口等工作
业务层中每一个具体业务的大部分功能可以通过继承基础层中的数种Base类来获得,所以基本上对于每一个业务,只需要书写以下代码就能拥有基础功能:
- 写一个描述蜜罐传来的信息的数据类,并且编写一个方法来把传来的信息转换为这个数据类
- 写一个sqlalchemy的orm类,来描述用来存储传来信息的数据库的表
剩下的代码基本上复制粘贴就可以
具体的步骤可以看src/feature/README.md)
source产生attack的来源也可以不只是socket,只要在内部调用
self.stream.asend()
方法把attack放入stream就可以
- https://github.com/rhoboro/async-fastapi-sqlalchemy/tree/main Async Web API with FastAPI + SQLAlchemy 2.0