开始着手

在学习Python的时候,首先是基础语法我快速过了一般30days的python练习,但是在学习的过程中没有感受到很强的困难,可能是因为思考的深度原因没有太多问题出现在脑海中。

在以为学习完基础的知识后,想新建一个项目来写写的时候,第一个问题来了,我的项目结构应该是什么样的?另外项目是怎么被管理的?其中的依赖管理,编译,打包生成制品是怎么进行的?

确定目标

因为自己有Java后端的背景,所以会想通过Java生态来找Python生态中的类似的实现来快速熟悉Python。根据这个想法,就开始行动起来。首先是搭建一个HTTP服务器并且使用上ORM和关系型数据库(MySQL或者PostgreSQL)。

框架选型

在Java生态中常见的是Spring框架作为依赖注入和实例管理容器为基底,很多类都只需要通过注解让框架自动生成单例,另外再通过注解的方式注入到依赖该单例的实例中。而Python生态下以我目前精力分配来说我没有去考虑使用类似的框架来实现,我也不太清楚Python生态下是否流行依赖注入的框架,因此我先放弃掉依赖注入框架。

基于上诉的构想,接下来我需要找Python生态下的支持HTTP协议的Web框架,通过搜索结合Github中Star数,在Python生态下找到了主流三个框架1. Django 2. Flask 3. FastAPI 结合我目前的状态,只需要纯后端支持就行了,主要是写HTTP API接口,所以就选择FastAPI。不过我对其还没有进行深入的研究,例如是如何做协议序列化,是否支持参数校验,是否支持拦截器等等 一些在业务实现中常常会使用到的功能点。在没有明确目标的情况下,就无脑的暂定用FastAPI了,其他的等后续的功能迭代需要再进行研究。

在选完Web框架后,就需要考虑数据库和对应的ORM框架。因为最近想做大模型相关的功能会依赖到向量数据库,而PostgreSQL即包含了MySQL能支持的也有对应的扩展插件来支持向量存储功能,于是就选用了PostgreSQL作为数据库。另外的ORM框架的话则是用了SQLAlchemy。

到此为止的话,基本的选型已经是完成了。当然还有一个重要的部分就是单测框架,其能确保自己写的每个部分能快速得到验证是否符合预期,而不是把整个项目跑起来在来判断,减短了验证的周期。暂时是pytest单测框架当然自己还完全不熟悉。